Aumento de las ALL/ANY
respuestas
Prefiero todas las soluciones que utilicen all
o any
para lograr el resultado, apreciando las notas adicionales (por ejemplo, sobre NULL s). Como otra mejora, aquí hay una forma de pensar en esos operadores.
Puede pensar en ellos como operadores de cortocircuito :
all(array)
recorre todos los valores de la matriz, comparando cada uno con el valor de referencia utilizando el operador proporcionado. Tan pronto como se obtiene una comparación false
, el proceso termina con falso, de lo contrario verdadero. (Comparable a la lógica de cortocircuito and
).
any(array)
recorre todos los valores de la matriz, comparándolos con el valor de referencia utilizando el operador proporcionado. Tan pronto como se obtiene una comparación true
, el proceso termina con verdadero, de lo contrario falso. (Comparable a la lógica de cortocircuito or
).
Esta es la razón por la 3 <> any('{1,2,3}')
que no produce el resultado deseado: el proceso compara 3 con 1 para la desigualdad, que es verdadero, e inmediatamente devuelve verdadero. Un solo valor en la matriz diferente de 3 es suficiente para que toda la condición sea verdadera. El 3 en la última posición de la matriz es prob. nunca usado.
3 <> all('{1,2,3}')
por otro lado, se asegura de que todos los valores no sean iguales 3. Se ejecutarán todas las comparaciones que arrojen verdadero hasta un elemento que arroje falso (el último en este caso), para devolver falso como resultado general. Esto es lo que quiere el OP.
WHERE 3 NOT IN recipient_ids
el trabajo?