sql >> Databáze >  >> RDS >> PostgreSQL

Proč se null rovná celému číslu v WHERE?

Máte pravdu, že NULL cannot be equal to anything .
Co vám chybí, je, že NULL nemůže být nerovné , buď .

NULL ve srovnání s čímkoli je vždy NULL . Problém je v tom, že máte LEFT JOIN špatně. Mělo by to fungovat:

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;

Měli jste další podmínku odkazující na vv v WHERE klauzule:AND vv.user_id != 39 . Pravděpodobně očekáváte, že NULL != 39 by se kvalifikovalo, ale nesplňuje. Další podrobnosti v této související odpovědi:
Dotaz s LEFT JOIN nevrací řádky pro počet 0

V zásadě existují tři techniky Chcete-li to provést:
Vyberte řádky, které nejsou uvedeny v jiné tabulce




  1. Hodnota pole spojit na řetězec v SQL Server

  2. CryptDB – nelze se připojit k proxy (CHYBA 1105 (HY000):(proxy) všechny backendy jsou mimo provoz)

  3. Jak použít název proměnné v příkazu SQL?

  4. Jak nastavit časové razítko s časovým pásmem v Laravel 5 Migrate