Aumentare le ALL/ANYrisposte
Preferisco tutte le soluzioni che utilizzano allo anyper 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_idsil lavoro?