SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
E il risultato è 1,2,3,4,5,6interrogazione Un PostgreSQL con 'qualsiasi' non funziona
SELECT "Ticket_id" FROM "Tickets"
WHERE "Status" = 1 AND ("Ticket_id" != ANY(array[1,2,3])) Limit 6
E il risultato è 1,2,3,4,5,6interrogazione Un PostgreSQL con 'qualsiasi' non funziona
che si desidera utilizzare ALL
, non ANY
. Da fine manual:
9.21.3. QUALSIASI/ALCUNE (array)
expression operator ANY (array expression)
[...] L'espressione sinistra viene valutata e confrontata con ogni elemento della matrice usando un dato operatore, che deve produrre un risultato booleano. Il risultato di
ANY
è "true" se si ottiene un risultato vero.
Quindi, se noi diciamo questo:
1 != any(array[1,2])
poi ci arriveremo vero in quanto (1 != 1) or (1 != 2)
è vero. ANY
è essenzialmente un operatore OR
. Per esempio:
=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]);
id
----
1
2
3
(3 rows)
Se guardiamo ALL
, we see:
9.21.4. ALL (array)
expression operator ALL (array expression)
[...] L'espressione sinistra viene valutata e confrontata con ogni elemento della matrice usando un dato operatore, che deve produrre un risultato booleano. Il risultato di
ALL
è "true" se tutti i confronti resa vera ...
quindi se noi diciamo questo:
1 != all(array[1,2])
poi ci arriveremo falsa poiché (1 != 1) and (1 != 2)
è falso e vediamo che ALL
è essenzialmente un operatore AND
. Per esempio:
=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]);
id
----
3
(1 row)
Se si desidera escludere tutti i valori di un array, utilizzare ALL
:
select "Ticket_id"
from "Tickets"
where "Status" = 1
and "Ticket_id" != all(array[1,2,3])
limit 6
vuoi dire:
"Ticked_id" NOT IN (1,2,3)
non so il valore della matrice. Devo usare QUALSIASI – Bogo
Oh mio male, che cambia tutto - http://stackoverflow.com/a/10675636/1406230 sopra è buono :) –