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

Hvordan sletter jeg fra flere tabeller ved hjælp af INNER JOIN i SQL server

Du kan drage fordel af den "slettede" pseudo-tabel i dette eksempel. Noget som:

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;

Selvfølgelig kan du lave en 'output slettet'. på den anden sletning også, hvis du havde brug for noget at deltage på til det tredje bord.

Som en sidebemærkning kan du også gøre inserted.* på en insert statement, og både inserted.* og deleted.* på en update statement.

EDIT: Har du også overvejet at tilføje en trigger på tabel1 for at slette fra tabel2 + 3? Du vil være inde i en implicit transaktion og vil også få "indsat." og "slettet. " pseudo-tabeller tilgængelige.



  1. Træk år fra en dato i PostgreSQL

  2. Skal jeg slette eller deaktivere en række i en relationsdatabase?

  3. MySQL db spørgsmålstegn i stedet for hebraiske tegn..?

  4. Leverer hurtigere innovation til MariaDBs fællesskab