sql >> データベース >  >> RDS >> Sqlserver

SQLServerでINNERJOINを使用して複数のテーブルから削除するにはどうすればよいですか

    この例では、「削除された」疑似テーブルを利用できます。次のようなもの:

    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番目の削除でも同様です。

    補足として、insertステートメントでinserted。*を実行し、updateステートメントでinserted。*とdeleted。*の両方を実行することもできます。

    編集: また、table1にトリガーを追加してtable2 + 3から削除することを検討しましたか?暗黙のトランザクションの内部にいて、「挿入されました。」と「削除されました。」もあります。 「疑似テーブルが利用可能です。



    1. プリペアドステートメント、 `WHERE .. IN(..)`クエリと並べ替え—MySQLを使用

    2. データベーステーブルからクラスを生成する

    3. SQLiteで日時をフォーマットする方法

    4. SQLiteデータベースとの間でバイト配列(画像データ)を保存および取得するにはどうすればよいですか?