Masz rację, że NULL cannot be equal to anything .
To, czego ci brakuje, to fakt, że NULL nie może być nierówny , albo
.
NULL w porównaniu do czegokolwiek jest zawsze NULL . Problem polega na tym, że masz LEFT JOIN zło. To powinno działać:
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;
Masz dodatkowy warunek odwołujący się do vv w WHERE klauzula:AND vv.user_id != 39 . Prawdopodobnie spodziewam się, że NULL != 39 kwalifikuje się, ale tak nie jest. Więcej szczegółów w tej powiązanej odpowiedzi:
Zapytanie z LEFT JOIN nie zwraca wierszy dla liczby 0
Istnieją zasadniczo trzy techniki w tym celu:
Wybierz wiersze, których nie ma w innej tabeli