2012-05-20 26 views

Respuesta

56

que desea utilizar ALL, no ANY. Del fine manual:

9.21.3. CUALQUIER/some (array)

expression operator ANY (array expression) 

[...] La expresión de la izquierda se evalúa y se compara con cada elemento de la matriz usando el dado operador, que debe producir un resultado booleano. El resultado de ANY es "verdadero" si se obtiene un resultado verdadero.

lo tanto, si decimos esto:

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

manera se consigue cierto ya (1 != 1) or (1 != 2) es cierto. ANY es esencialmente un operador OR. Por ejemplo:

=> select id from (values (1),(2),(3)) as t(id) where id != any(array[1,2]); 
id 
---- 
    1 
    2 
    3 
(3 rows) 

Si nos fijamos en ALL, we see:

9.21.4. ALL (array)

expression operator ALL (array expression) 

[...] La expresión de la izquierda se evalúa y se compara con cada elemento de la matriz usando el dado operador, que debe producir un resultado booleano. El resultado de ALL es "true" si todas las comparaciones dan cierto ...

por lo que si decimos esto:

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

manera se consigue falsa desde (1 != 1) and (1 != 2) es falso y vemos que ALL es esencialmente un operador AND. Por ejemplo:

=> select id from (values (1),(2),(3)) as t(id) where id != all(array[1,2]); 
id 
---- 
    3 
(1 row) 

Si desea excluir todos los valores en una matriz, utilice ALL:

select "Ticket_id" 
from "Tickets" 
where "Status" = 1 
    and "Ticket_id" != all(array[1,2,3]) 
limit 6 
7

Qué quiere decir:

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

que no conocen el valor de la matriz. Tengo que usar CUALQUIER – Bogo

+0

Oh mi mal, eso cambia todo - http://stackoverflow.com/a/10675636/1406230 arriba es bueno :) –

Cuestiones relacionadas