如果记录在表A中,则可以将它们插入表B
insert into B
select * from A
minus
select * from B
如何删除B中而不是A中的记录?
select * from B
minus
select * from A
如何删除记录?
假定我们没有主键或唯一键。
您可以这样做:
delete from a2
where (COLUMN1, COLUMN2, COLUMN3, ...) in (select * from a2
minus
select * from a1);
它可以工作,但是您必须在where子句中输入列名。不能以insert into select * from ...
这样漂亮的方式删除吗?
答案 0 :(得分:1)
如果您想继续使用当前的方法,则应在减去查询中不使用select *
。相反,您应该总是显式列出您要使用的列。
但是,我会在这里使用EXISTS
查询:
DELETE
FROM tableB b
WHERE NOT EXISTS (SELECT 1 FROM tableA a
WHERE a.col1 = b.col1 AND
a.col2 = b.col2 AND
a.col3 = b.col3 AND ...);
今后的最佳实践是在A表中有一个主键列。然后,您只需要对照B表检查该列的唯一性即可。