PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi null est-il égal à entier dans WHERE ?

Vous avez raison de dire que NULL cannot be equal to anything .
Ce qui vous manque, c'est que NULL ne peut pas être inégal , soit .

NULL comparé à quoi que ce soit est toujours NULL . Le problème actuel est que vous avez le LEFT JOIN mauvais. Cela devrait fonctionner :

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;

Vous aviez une condition supplémentaire faisant référence à vv dans le WHERE clause :AND vv.user_id != 39 . Attendant probablement que NULL != 39 serait admissible, mais ce n'est pas le cas. Plus de détails dans cette réponse connexe :
La requête avec LEFT JOIN ne renvoie pas de lignes pour un nombre de 0

Il existe essentiellement trois techniques pour ce faire :
Sélectionnez les lignes qui ne sont pas présentes dans une autre table