带有'ANY'的PostgreSQL查询无效

Bog*_*ogo 31 arrays postgresql

SELECT "Ticket_id"  FROM "Tickets"
 WHERE "Status" = 1 AND ("Ticket_id" !=  ANY(array[1,2,3])) Limit 6
Run Code Online (Sandbox Code Playgroud)

结果是1,2,3,4,5,6

mu *_*ort 65

你想要使用ALL,而不是ANY.从精细手册:

9.21.3.ANY/SOME(数组)

expression operator ANY (array expression)
Run Code Online (Sandbox Code Playgroud)

[...]使用给定的运算符计算左侧表达式并与数组的每个元素进行比较,这必须产生布尔结果.ANY如果获得任何真实结果,则结果为"真".

所以,如果我们这样说:

1 != any(array[1,2])
Run Code Online (Sandbox Code Playgroud)

那么我们会成真,因为(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)
Run Code Online (Sandbox Code Playgroud)

如果我们看一下ALL,我们会看到:

9.21.4.ALL(数组)

expression operator ALL (array expression)
Run Code Online (Sandbox Code Playgroud)

[...]使用给定的运算符计算左侧表达式并与数组的每个元素进行比较,这必须产生布尔结果.ALL如果所有比较产生真实,结果是"真实的"......

所以,如果我们这样说:

1 != all(array[1,2])
Run Code Online (Sandbox Code Playgroud)

然后我们会得到假,因为(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)
Run Code Online (Sandbox Code Playgroud)

如果要排除数组中的所有值,请使用ALL:

select "Ticket_id"
from "Tickets"
where "Status" = 1
  and "Ticket_id" != all(array[1,2,3])
limit 6
Run Code Online (Sandbox Code Playgroud)


Bil*_*kil 7

你的意思是:

"Ticked_id" NOT IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)

  • 我不知道数组的价值.我必须使用任何东西 (3认同)