sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué nulo es igual a entero en DONDE?

Tienes razón en que NULL cannot be equal to anything .
Lo que te falta es que NULL no puede ser desigual , ya sea .

NULL comparado con cualquier cosa siempre es NULL . El problema en cuestión es que obtuviste el LEFT JOIN equivocado. Esto debería funcionar:

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;

Tenías una condición adicional que hace referencia a vv en el WHERE cláusula:AND vv.user_id != 39 . Probablemente esperaba que NULL != 39 calificaría, pero no lo hace. Más detalles en esta respuesta relacionada:
La consulta con LEFT JOIN no devuelve filas para el conteo de 0

Hay básicamente tres técnicas para hacer esto:
Seleccionar filas que no están presentes en otra tabla