编写SQL查询,查找表X中列A中不在表Y的列B中出现的值。
更新:使用not in(超过5分钟,我没有等待其完成),表Y中的列B是主键。
更新:我正在使用Oracle。两个表的大小均为数百万行。当然,我还在使用另一个WHERE子句,这意味着我要将表X的约500,000行与表Y中数百万行进行比较。
如果Y.B中有任何NULL值,您就不能依赖于NOT IN
。
Select A from X where not EXISTS (select * from Y where Y.B = X.A)
一般来说,最安全的方式是使用NOT EXISTS
。如果Y是A的子项,则OUTER JOIN
可能会给出更多行。
MINUS
来实现此功能)最后一种方法似乎是在Oracle中实现这个功能的首选方式,但我自己无法保证。
Select A from X where not A in (select B from Y)
MINUS
将会给你更好的性能表现。http://www.dba-oracle.com/oracle_tips_subq_rewrite.htm - Martin Smith