2012-05-20 10 views

risposta

56

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 
7

vuoi dire:

"Ticked_id" NOT IN (1,2,3) 
+3

non so il valore della matrice. Devo usare QUALSIASI – Bogo

+0

Oh mio male, che cambia tutto - http://stackoverflow.com/a/10675636/1406230 sopra è buono :) –

Problemi correlati