与えられた
表1:
ID|名前
テーブル 2:
ID|テーブル1_ID|テーブル3_ID
表 3:
ID|チェック済み(タイプ=ブール値)
table1の対応する行が削除され、対応するtable3の行がchecked = trueの場合、table2の行を削除したいと思います。
どの SQL ステートメントを使用する必要がありますか?
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;
//
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