sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför är null lika med heltal i WHERE?

Du har rätt i att NULL cannot be equal to anything .
Det du saknar är att NULL inte kan vara ojämlika antingen .

NULL jämfört med någonting är alltid NULL . Problemet är att du fick LEFT JOIN fel. Detta borde fungera:

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 hade ett ytterligare tillstånd som hänvisar till vv i WHERE klausul:AND vv.user_id != 39 . Förväntar mig förmodligen att NULL != 39 skulle kvalificera sig, men det gör det inte. Mer information i detta relaterade svar:
Fråga med LEFT JOIN returnerar inte rader för antalet 0

Det finns i princip tre tekniker för att göra detta:
Välj rader som inte finns i andra tabeller




  1. MariaDB LIMIT uttalande ger mer än gränsen

  2. Cacha med PHP för att ta bort stressen från MySQL

  3. Oracle sql:ordning efter och distinkt klausul

  4. MYSQL Hur man matchar två ord i en mening