Chcesz użyć ALL
, a nie ANY
. Z dobrego podręcznika:
9.21.3. DOWOLNE/NIEKTÓRE (tablica)
expression operator ANY (array expression)
[...] Wyrażenie po lewej stronie jest oceniane i porównywane z każdym elementem tablicy przy użyciu podanego operatora , co musi dać wynik logiczny. Wynik ANY
jest „prawdziwe”, jeśli uzyskano jakikolwiek prawdziwy wynik.
Więc jeśli tak powiemy:
1 != any(array[1,2])
wtedy otrzymamy prawdę, ponieważ (1 != 1) or (1 != 2)
jest prawdziwy. ANY
jest zasadniczo OR
operator. Na przykład:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Jeśli spojrzymy na ALL
, widzimy:
9.21.4. WSZYSTKIE (tablica)
expression operator ALL (array expression)
[...] Wyrażenie po lewej stronie jest oceniane i porównywane z każdym elementem tablicy przy użyciu podanego operatora , co musi dać wynik logiczny. Wynik ALL
jest "prawda", jeśli wszystkie porównania dają prawdę...
więc jeśli tak powiemy:
1 != all(array[1,2])
wtedy otrzymamy fałsz, ponieważ (1 != 1) and (1 != 2)
jest fałszywe i widzimy, że ALL
jest zasadniczo AND
operator. Na przykład:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Jeśli chcesz wykluczyć wszystkie wartości z tablicy, użyj ALL
:
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6