web-dev-qa-db-ja.com

「ANY」を使用したPostgreSQLクエリが機能していません

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

結果は1,2,3,4,5,6です

31
Bogo

ALLではなく、ANYを使用します。 ファインマニュアル から:

9.21.3。 ANY/SOME(配列)

expression operator ANY (array expression)

[...]左側の式が評価され、指定されたoperatorを使用して配列の各要素と比較されます。 。真の結果が得られた場合、ANYの結果は「真」になります。

これを言うと:

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

(1 != 1) or (1 != 2)はtrueです。 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。 ALL(配列)

expression operator ALL (array expression)

[...]左側の式が評価され、指定されたoperatorを使用して配列の各要素と比較されます。 。すべての比較でtrueが得られた場合、ALLの結果は「true」になります...

これを言うと:

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

その後、(1 != 1) and (1 != 2)はfalseであり、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
65
mu is too short

もしかして:

"Ticked_id" NOT IN (1,2,3)
6
Bilal Akil