Aumentare le ALL/ANY
risposte
Preferisco tutte le soluzioni che utilizzano all
o any
per ottenere il risultato, apprezzando le note aggiuntive (es. Sui NULL ). Come ulteriore aumento, ecco un modo per pensare a quegli operatori.
Puoi considerarli come operatori di cortocircuito :
all(array)
passa attraverso tutti i valori nell'array, confrontandoli con il valore di riferimento utilizzando l'operatore fornito. Non appena si ottiene un confronto false
, il processo termina con falso, altrimenti vero. (Paragonabile al cortocircuito logico and
.)
any(array)
passa attraverso tutti i valori nell'array, confrontandoli con il valore di riferimento utilizzando l'operatore fornito. Non appena si ottiene un confronto true
, il processo termina con vero, altrimenti falso. (Paragonabile al cortocircuito logico or
.)
Questo è il motivo per cui 3 <> any('{1,2,3}')
non produce il risultato desiderato: il processo confronta 3 con 1 per la disuguaglianza, che è vero, e restituisce immediatamente vero. Un singolo valore nella matrice diverso da 3 è sufficiente per rendere vera l'intera condizione. Il 3 nell'ultima posizione dell'array è prob. mai usato.
3 <> all('{1,2,3}')
d'altra parte si assicura che tutti i valori non siano uguali 3. Eseguirà tutti i confronti che restituiscono true fino a un elemento che restituisce false (l'ultimo in questo caso), per restituire false come risultato complessivo. Questo è ciò che vuole l'OP.
WHERE 3 NOT IN recipient_ids
il lavoro?