SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
结果是 1,2,3,4,5,6
SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
结果是 1,2,3,4,5,6
你想用ALL
,没有ANY
。来自精美手册:
9.21.3。任何/一些(数组)
expression operator ANY (array expression)
[...] 使用给定的operator计算左侧表达式并与数组的每个元素进行比较,这必须产生一个布尔结果。如果获得任何真结果,则结果
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
,我们会看到:
9.21.4。全部(数组)
expression operator ALL (array expression)
[...] 使用给定的operator计算左侧表达式并与数组的每个元素进行比较,这必须产生一个布尔结果。如果所有比较结果为真,则结果
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)