Oracle中有2张相同字段与相同主键的表(2表设计完全相同...
发布网友
发布时间:2023-11-19 15:14
我来回答
共6个回答
热心网友
时间:2024-08-08 09:02
Oracle 9i 开始支持 MERGE语句
-- 源表
CREATE TABLE test_from (id INT, val VARCHAR(20));
-- 目标表
CREATE TABLE test_to (id INT, val VARCHAR(20));
-- 插入源表
INSERT INTO test_from VALUES (1, 'A');
INSERT INTO test_from VALUES (2, 'B');
-- 合并 源表到目标表
MERGE INTO test_to
USING test_from
ON ( test_to.id = test_from.id ) -- 条件是 id 相同
WHEN MATCHED THEN UPDATE SET test_to.val = test_from.val -- 匹配的时候,更新
WHEN NOT MATCHED THEN INSERT VALUES(test_from.id, test_from.val) -- 源表有,目标表没有,插入
-- 第一次检查 目标表数据.
SQL> SELECT * FROM test_to;
ID VAL
---------- --------------------
1 A
2 B
-- 更新源表
UPDATE test_from SET val = 'A2' WHERE id = 1;
-- 删除源表
DELETE FROM test_from WHERE id = 2;
-- 插入源表
INSERT INTO test_from VALUES (3, 'C');
-- 合并 源表到目标表
MERGE INTO test_to
USING test_from
ON ( test_to.id = test_from.id ) -- 条件是 id 相同
WHEN MATCHED THEN UPDATE SET test_to.val = test_from.val -- 匹配的时候,更新
WHEN NOT MATCHED THEN INSERT VALUES(test_from.id, test_from.val) -- 源表有,目标表没有,插入
-- 再次检查 目标表数据.
SQL> SELECT * FROM test_to;
ID VAL
---------- --------------------
1 A2
2 B
3 C
热心网友
时间:2024-08-08 09:05
如果表1和表2的结构是完全一样的,可以这样做:
1)删除表1中数据
2)将表2中数据填入到表1中
insert into 表1
as select * from 表2;
热心网友
时间:2024-08-08 09:03
--使用merge语句
MERGE INTO 表2
USING 表1
ON (表1.id = 表2.id )
WHEN MATCHED THEN UPDATE SET 表1.name= 表2.name
WHEN NOT MATCHED THEN INSERT VALUES(表2.id,表2.name)
热心网友
时间:2024-08-08 09:02
insert into table2 select *from table1 where id not in (select id from table2);
热心网友
时间:2024-08-08 09:08
merge专门用于你这样的要求
热心网友
时间:2024-08-08 09:08
insert into 表2
select * from 表1
where not exists (select 1 from 表2 where 表2.主键 = 表1.主键)