0

与えられた

表1:

ID|名前

テーブル 2:

ID|テーブル1_ID|テーブル3_ID

表 3:

ID|チェック済み(タイプ=ブール値)

table1の対応する行が削除され、対応するtable3の行がchecked = trueの場合、table2の行を削除したいと思います。

どの SQL ステートメントを使用する必要がありますか?

4

2 に答える 2

1

1 つはチェック済みセットが 1 に設定されていることを検出するため、もう 1 つは table1 からの削除をチェックするための 2 つのトリガーが必要です。これらは少し「手早く汚い」ものですが、最新の MySQL バージョンで動作するはずです。

DELIMITER //

CREATE TRIGGER trig_table1 AFTER DELETE ON table1 
FOR EACH ROW
BEGIN
  DELETE table2.*  
  FROM table2
  JOIN table3 
    ON table3_id = table3.id
   AND table3.checked = 1
   AND table1_id = OLD.id;
END;
//

CREATE TRIGGER trig_table3 AFTER UPDATE ON table3
FOR EACH ROW
BEGIN
  DELETE table2.* 
  FROM table2
  LEFT JOIN table3 
    ON table3.id = OLD.id
   AND table3.checked = 0
  LEFT JOIN table1
    ON table1_id = table1.id
   AND table3_id = OLD.id
  WHERE table2.table3_id = OLD.id
    AND table3.id IS NULL
    AND table1.id IS NULL;
END;
//

でテストする SQLfiddle

于 2013-07-19T16:53:02.097 に答える
0

MS SQLでこのようなことを試すことができます。

delete table2 from table2 inner join table3 on table2.table3_id = table3.id
left join table1 on table1.id = table2.table1_id
where table3.checked = true and table1.id is null
于 2013-07-18T15:14:44.723 に答える