SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
,其結果是1,2,3,4,5,6PostgreSQL的查詢與 '任意' 不工作
SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
,其結果是1,2,3,4,5,6PostgreSQL的查詢與 '任意' 不工作
你想用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
你的意思是:
"Ticked_id" NOT IN (1,2,3)
我不知道數組的值。我必須使用任何 – Bogo
哦,我的壞,這改變了一切 - 上面的http://stackoverflow.com/a/10675636/1406230是好的:) –