1. ホーム
  2. sql

[解決済み] SQLサーバーでINNER JOINを使用して複数のテーブルから削除する方法

2022-07-20 17:53:49

質問

MySQL では、次の構文が使用できます。

DELETE t1,t2 
FROM table1 AS t1 
INNER JOIN table2 t2 ...
INNER JOIN table3 t3 ...

SQL Serverで同じことをするにはどうすればよいですか?

どのように解決するのですか?

この例では、"deleted" の擬似テーブルを利用することができます。次のようなものです。

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;

もちろん、3番目のテーブルのために結合するものが必要であれば、2番目の削除でも'output deleted.'を実行することができます。

余談ですが、insert 文では inserted.* を、update 文では inserted.* と deleted.* の両方を実行することも可能です。

EDITです。 また、table1に対してtable2 + 3から削除するトリガーを追加することを検討したことがありますか?あなたは暗黙のトランザクションの中にいることになり、また、"insertedを持つことになります。 および"deleted. "擬似テーブルが使用できます。