PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché null è uguale a intero in WHERE?

Hai ragione sul fatto che NULL cannot be equal to anything .
Quello che ti manca è che NULL non può essere disuguale , o .

NULL rispetto a qualsiasi cosa è sempre NULL . Il problema è che hai il LEFT JOIN sbagliato. Questo dovrebbe funzionare:

SELECT v.user_id, v.version_id, vv.user_id
FROM   versions v
LEFT   JOIN versions_votes vv ON v.version_id = vv.version_id
                             AND vv.user_id = 39
WHERE  vv.version_id IS NULL
ORDER  BY v.created
LIMIT  1;

Hai avuto una condizione aggiuntiva che fa riferimento a vv nel WHERE clausola:AND vv.user_id != 39 . Probabilmente mi aspettavo che NULL != 39 si qualificherebbe, ma non è così. Maggiori dettagli in questa risposta correlata:
Query con LEFT JOIN che non restituisce righe per il conteggio di 0

Esistono fondamentalmente tre tecniche per farlo:
Seleziona le righe che non sono presenti in un'altra tabella