2012-05-20 36 views

回答

56

你想用ALL,而不是ANY。來自fine manual

9.21.3。 ANY/SOME(陣列)

expression operator ANY (array expression) 

[...]的左側表達式求值並與使用給定的操作者,其必須產生一個布爾結果陣列的每個元素。如果獲得任何真實結果,則ANY的結果爲「真」。

因此,如果我們這樣說:

1 != any(array[1,2]) 

那麼因爲(1 != 1) or (1 != 2)是真的,我們會得到正確的。 ANY本質上是一個OR運算符。例如:

=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]); 
id 
---- 
    1 
    2 
    3 
(3 rows) 

如果我們看一下ALL, we see

9.21.4。 ALL(陣列)

expression operator ALL (array expression) 

[...]的左側表達式求值並與使用給定的操作者,其必須產生一個布爾結果陣列的每個元素。的ALL結果是「真」,如果所有的比較中得到真正的...

因此,如果我們這樣說:

1 != all(array[1,2]) 

然後我們會得到錯誤的,因爲(1 != 1) and (1 != 2)是假的,我們看到ALL基本上是一個AND運營商。例如:

=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]); 
id 
---- 
    3 
(1 row) 

如果要排除數組中的所有值,使用ALL

select "Ticket_id" 
from "Tickets" 
where "Status" = 1 
    and "Ticket_id" != all(array[1,2,3]) 
limit 6 
7

你的意思是:

"Ticked_id" NOT IN (1,2,3) 
+3

我不知道數組的值。我必須使用任何 – Bogo

+0

哦,我的壞,這改變了一切 - 上面的http://stackoverflow.com/a/10675636/1406230是好的:) –