sql >> Database >  >> RDS >> Sqlserver

Hoe verwijder ik uit meerdere tabellen met INNER JOIN in SQL server?

U kunt in dit voorbeeld profiteren van de "verwijderde" pseudo-tabel. Iets als:

begin transaction;

   declare @deletedIds table ( id int );

   delete from t1
   output deleted.id into @deletedIds
   from table1 as t1
    inner join table2 as t2
      on t2.id = t1.id
    inner join table3 as t3
      on t3.id = t2.id;

   delete from t2
   from table2 as t2
    inner join @deletedIds as d
      on d.id = t2.id;

   delete from t3
   from table3 as t3 ...

commit transaction;

Uiteraard kunt u een 'uitvoer verwijderd' doen. ook bij de tweede verwijdering, als je iets nodig hebt om aan de derde tafel mee te doen.

Even terzijde:je kunt ook insert.* doen op een insert-instructie, en zowel insert.* als verwijderd.* op een update-instructie.

BEWERKEN: Heb je ook overwogen om een ​​trigger toe te voegen aan table1 om uit table2 + 3 te verwijderen? U bevindt zich in een impliciete transactie en heeft ook de "inserted." en "deleted. " pseudo-tabellen beschikbaar.



  1. Innerlijke drie tafels samenvoegen

  2. Wijzig een MySQL-kolom in AUTO_INCREMENT

  3. Selecteer TOP X (of onderste) procent voor numerieke waarden in MySQL

  4. SQL GROUP BY CASE-instructie met aggregatiefunctie