'不在'不工作但在'减去'在Oracle DB中正常工作

时间:2017-10-18 10:29:49

标签: sql oracle

我正在尝试使用With从一个表中获取不在另一个表中的条目。

以下查询不会返回任何记录:

Oracle DB

但是以下内容按预期返回记录:

select distinct FOO from TABLE_A where FOO not in (select distinct FOO from TABLE_B)

为什么第一个查询不起作用?

我检查过的事情:

  • 我尝试删除不同的关键字,但没有运气。
  • 我已经单独执行了查询和子查询,并返回了预期的结果。
  • 我已将子查询替换为值列表 - 按预期工作。
  • 我给列名称别名 - 没有变化。
  • 列数据类型相同。
  • 我无法找到可能产生问题的表格设置方式。

1 个答案:

答案 0 :(得分:2)

not exists与子查询一起使用:

select distinct s.FOO
from TABLE_A a
where not exists (select 1 from table_b b where b.foo = a.foo);

任何 b.fooNULL时,所有行都会被过滤掉。在这种情况下,not in返回FALSE或NULL。条件永远不会返回TRUE。

not exists具有预期的语义。

我应该在使用in时添加(如果您仍想使用not in),则子查询中不需要select distinct