2017-10-18 16 views
1

我試圖從一個表中不使用另一個表,使用Oracle DB'不在'不工作,但'減''在Oracle數據庫中正常工作

下面的查詢不返回任何記錄:

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

但接下來的收益預期記錄:

(select distinct FOO from TABLE_A) minus (select distinct FOO from TABLE_B) 

爲什麼第一個查詢不工作?

事情我已經檢查:

  • 我試圖消除不同的關鍵字,但沒有運氣。
  • 我已經單獨執行查詢和子查詢,它們會返回預期的結果。
  • 我用值列表替換了子查詢 - 按預期工作。
  • 我已經別名列名 - 沒有改變。
  • 列數據類型是相同的。
  • 我找不到任何可能會產生問題的表格設置方式。
+2

'table_b'包含'foo'爲'null'的行嗎? –

+0

是的,TABLE_B中有一些FOO爲空的記錄。 –

+0

過去十年裏,「不在」是如此。 '不存在的地方'是它現在的位置 – JohnHC

回答

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

相關問題