Oracle MINUS运算符和删除

时间:2019-05-10 09:20:06

标签: oracle

如果记录在表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 ...这样漂亮的方式删除吗?

1 个答案:

答案 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表检查该列的唯一性即可。