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. ANY/SOME (配列)
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. ALL (配列)
expression operator ALL (array expression)
[...] 左側の式が評価され、指定されたoperatorを使用して配列の各要素と比較されます。これにより、ブール値の結果が得られる必要があります。すべての比較が true の場合、 の結果
ALL
は「true」です...
したがって、次のように言うと:
1 != all(array[1,2])
次に、(1 != 1) and (1 != 2)
is false であるため 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
つまり:
"Ticked_id" NOT IN (1,2,3)