2011-07-28 76 views
1
SELECT something FROM somewhere WHERE something IN (a, b, c) 

產生正常的結果,而且,奇怪NOT IN操作符行爲

SELECT something FROM somewhere WHERE something NOT IN (a, b, c) 

應該給我從柱東西所有結果表地方,但它給了我很多次以上隨機重複行比在桌子上。互聯網上的所有NOT IN例子都帶有文本字符串,我正在處理數字,有什麼不同嗎?

+3

您的'select'語句真的很簡單,還是加入多個表? – meagar

+1

沒辦法。你的數據一定有問題。 ** IN/NOT IN **操作應該像您所描述的那樣行事。 –

+0

另外,在數字中沒有使用'not in()'的特殊規則,它的行爲與預期完全相同。請更新問題以包含您的實際查詢,因爲按照現狀,您的問題不能回答 - 「in/not in」只是不按照您描述的方式行事。 – meagar

回答

1

在結果中接收「多次多」的行幾乎總是不正確的連接的結果。檢查FROM子句中的JOIN語句和/或您在WHERE子句中指定的任何表關係。

確保您沒有在FROM子句中包含任何未正確連接到SELECT語句中的其他表的表。

祝你好運!

+0

嗯,如何測試沒有不正確的連接,當postgresql不給我任何錯誤和IN測試返回我正確的結果。 – Euphorbium

4

沒有「真正」的查詢,很難說這是怎麼回事...

達說,並增加了邁克爾的回答,請務必不要在not in條款具有空值,作爲語義與看似相反的in子句的語義完全不同:

select a from b where a in (1, null);  -- rows where a = 1 
select a from b where a not in (1, null); -- no rows, since x <> null is null 
+0

null既不匹配也不匹配一個值 - 即任何測試(除'null之外)都是錯誤的。如果列表中只有一個值爲空,則比較將始終爲假 – Bohemian