sql >> Database teknologi >  >> RDS >> Sqlserver

Elegant måde at slette rækker, som ikke er refereret til af en anden tabel

Der er en berygtet gotcha for not in . Grundlæggende er id not in (1,2,3) er en forkortelse for:

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

Hvis nu dine TimeEntries tabel indeholder en række med et TaskID af null , not in oversættes til:

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

Resultatet af en sammenligning med null er altid unknown . Siden unknown er ikke sandt i SQL, where klausul filtrerer alle rækker fra, og du ender med at slette intet.

En nem rettelse er en ekstra where-klausul i underforespørgslen:

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


  1. Hvordan vælger jeg tilfældigt unikke par af rækker fra en tabel?

  2. Sådan opretter du et forhold i MySQL Workbench

  3. mysql-connector-java-8.0.12:får fejl for 'Malay Peninsula Standard Time' server tidszone

  4. Opdel datointervaller i tilsvarende uger