PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum ist null gleich Integer in WHERE?

Sie haben Recht, dass NULL cannot be equal to anything .
Was Sie vermissen, ist, dass NULL nicht ungleich sein kann , entweder .

NULL verglichen mit allem ist immer NULL . Das vorliegende Problem ist, dass Sie den LEFT JOIN erhalten haben falsch. Das sollte funktionieren:

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;

Sie hatten eine zusätzliche Bedingung, die auf vv verwies im WHERE Klausel:AND vv.user_id != 39 . Erwartet wahrscheinlich, dass NULL != 39 würde sich qualifizieren, tut es aber nicht. Weitere Details in dieser zugehörigen Antwort:
Abfrage mit LEFT JOIN gibt keine Zeilen für die Anzahl 0 zurück

Grundsätzlich gibt es drei Techniken um dies zu tun:
Wählen Sie Zeilen aus, die in keiner anderen Tabelle vorhanden sind