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

Hvorfor er null lig med heltal i WHERE?

Du har ret i, at NULL cannot be equal to anything .
Det du mangler er, at NULL ikke kan være ulige enten .

NULL sammenlignet med noget er altid NULL . Problemet er, at du har LEFT JOIN forkert. Dette burde virke:

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;

Du havde en yderligere betingelse, der refererede til vv i WHERE klausul:AND vv.user_id != 39 . Forventer sandsynligvis at NULL != 39 ville kvalificere sig, men det gør det ikke. Flere detaljer i dette relaterede svar:
Forespørgsel med LEFT JOIN returnerer ikke rækker for optælling af 0

Der er grundlæggende tre teknikker for at gøre dette:
Vælg rækker, der ikke findes i en anden tabel




  1. SQL-forespørgsel; vandret til lodret

  2. Hvordan tjekker jeg mine InnoDB-indstillinger?

  3. Mysql - Sådan afsluttes/forlader du lagret procedure

  4. JSON_INSERT() vs JSON_SET() vs JSON_REPLACE() i SQLite