sql >> Databáze >  >> RDS >> Sqlserver

Elegantní způsob, jak odstranit řádky, na které neodkazuje jiná tabulka

Existuje jeden notoricky známý problém pro not in . V podstatě id not in (1,2,3) je zkratka pro:

id <> 1 and id <> 2 and id <> 3

Nyní, pokud vaše TimeEntries tabulka obsahuje libovolný řádek s TaskID z null , not in překládá do:

ID <> null and ID <> 1 and ID <> 2 AND ...

Výsledek porovnání s null je vždy unknown . Od unknown není pravda v SQL, where klauzule odfiltruje všechny řádky a nakonec nesmažete nic.

Snadnou opravou je další klauzule where v poddotazu:

DELETE FROM Tasks 
WHERE  ID not IN 
       (
       SELECT  TaskID 
       FROM    TimeEntries 
       WHERE   TaskID is not null
       )


  1. Jak zkontrolovat zastaralé statistiky

  2. Python Pandas - Použití to_sql k zápisu velkých datových rámců v blocích

  3. Existuje způsob, jak získat první a poslední pracovní den v měsíci?

  4. Hostitel nepovoluje události na MySQL, což je nejlepší alternativa