PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que null é igual a inteiro em WHERE?


Você está certo que NULL cannot be equal to anything .
O que está faltando é que NULL não pode ser desigual , ou .

NULL comparado a qualquer coisa é sempre NULL . O problema em questão é que você tem o LEFT JOIN errado. Isso deve 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;

Você tinha uma condição adicional referenciando vv no WHERE cláusula:AND vv.user_id != 39 . Provavelmente esperando que NULL != 39 qualificaria, mas não. Mais detalhes nesta resposta relacionada:
Consulta com LEFT JOIN não retornando linhas para contagem de 0

Existem basicamente três técnicas para fazer isso:
Selecione as linhas que não estão presentes em outra tabela