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