sql >> Databasteknik >  >> RDS >> Sqlserver

Hur tar jag bort från flera tabeller med INNER JOIN i SQL-servern

Du kan dra fördel av den "borttagna" pseudotabellen i det här exemplet. Något i stil med:

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;

Självklart kan du göra en "utdata raderad." på den andra raderingen också, om du behövde något att gå med på för det tredje bordet.

Som en sidoanteckning kan du också göra inserted.* på en insert-sats, och både insert.* och deleted.* på en update-sats.

EDIT: Har du också funderat på att lägga till en trigger på tabell1 för att radera från tabell2 + 3? Du kommer att vara inne i en implicit transaktion och kommer också att få "infogad." och "raderad. " pseudo-tabeller tillgängliga.



  1. JDBC MySql-anslutningspoolning görs för att undvika uttömd anslutningspool

  2. PostgreSQL och C# datatyper

  3. Postgres tabell kolumn namnbegränsningar?

  4. Hur kan jag inkludera nollvärden i ett MIN eller MAX?