编写SQL查询以查找表X中列A中不存在于表Y的列B中的那些值

时间:2010-06-17 11:07:12

标签: sql oracle

编写SQL查询以查找表X中列A中表Y中不存在的值。

更新:查询花费的时间太长而没有(超过5分钟,我没有等待它完成)表Y中的列B是主键。

更新:即时通讯使用oracle。两个表的表大小以百万(行)为单位。当然,我正在使用另一个WHERE子句,这意味着我在表Y中比较了大约500,000行表X和数百万行

3 个答案:

答案 0 :(得分:7)

无法 依赖NOT IN如果 任何 YULLS在YB中

Select A from X where not EXISTS (select * from Y where Y.B = X.A)

最安全的方式是NOT EXISTS。如果Y是A

的孩子,则OUTER JOIN可能会提供更多行

答案 1 :(得分:2)

我能想到有4种方法可以做到这一点。

  • 不在(小心NULL)
  • 外部加入 并过滤NULL(可能需要添加DISTINCT)
  • NOT EXISTS
  • 除了(有问题的更新后,Oracle使用非标准MINUS运算符)

最后一个在Oracle中似乎是the preferred way of doing it,但我自己也无法保证。

答案 2 :(得分:0)

这应该有效:

Select A from X where not A in (select B from Y)