単一のクエリで複数の削除
-
03-10-2019 - |
質問
table1から削除するconditionid =?conditionid;
DELETE FROM Table2 WHERE ConditionID=?ConditionID;
DELETE FROM Table3 WHERE ConditionID=?ConditionID;
ConditionIDは、表1、表2、表3に存在する列です。3回個別に実行する代わりに、3つすべてを1回のクエリ(MySQL)で実行する方法はありますか?
解決
場合 ConditionID
3つのテーブルすべてで同じです。 複数のテーブル削除構文を削除します:
DELETE Table1, Table2, Table3
FROM Table1
JOIN Table2 ON (Table2.ConditionID = Table1.ConditionID)
JOIN Table3 ON (Table3.ConditionID = Table2.ConditionID)
WHERE Table1.ConditionID = ?;
テストケース:
CREATE TABLE Table1 (id int, ConditionID int);
CREATE TABLE Table2 (id int, ConditionID int);
CREATE TABLE Table3 (id int, ConditionID int);
INSERT INTO Table1 VALUES (1, 100);
INSERT INTO Table1 VALUES (2, 100);
INSERT INTO Table1 VALUES (3, 200);
INSERT INTO Table2 VALUES (1, 100);
INSERT INTO Table2 VALUES (2, 200);
INSERT INTO Table2 VALUES (3, 300);
INSERT INTO Table3 VALUES (1, 100);
INSERT INTO Table3 VALUES (2, 100);
INSERT INTO Table3 VALUES (3, 100);
結果:
DELETE Table1, Table2, Table3
FROM Table1
JOIN Table2 ON (Table2.ConditionID = Table1.ConditionID)
JOIN Table3 ON (Table3.ConditionID = Table2.ConditionID)
WHERE Table1.ConditionID = 100;
SELECT * FROM Table1;
+------+-------------+
| id | ConditionID |
+------+-------------+
| 3 | 200 |
+------+-------------+
1 row in set (0.00 sec)
SELECT * FROM Table2;
+------+-------------+
| id | ConditionID |
+------+-------------+
| 2 | 200 |
| 3 | 300 |
+------+-------------+
2 rows in set (0.00 sec)
SELECT * FROM Table3;
Empty set (0.00 sec)
他のヒント
あなたのスキーマがどのように見えるかはわかりませんが、InnoDB、またはテーブルに同様のテーブルエンジンを使用して外部キーを使用する場合、親エントリが削除されたときに派生エントリを削除する条件を設定できます。見る http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html その詳細については。
いいえ。 ConditionID
それぞれが別々です。同じ名前があるということで、同じ列であるという意味ではありません。名前を完全に認定すると、それをよりよく見ることができます:
DELETE FROM Table1 WHERE Table1.ConditionID=?ConditionID;
DELETE FROM Table2 WHERE Table2.ConditionID=?ConditionID;
DELETE FROM Table3 WHERE Table3.ConditionID=?ConditionID;
MySQLの「削除」query.Considerを使用するだけで、複数のテーブルから行を削除できます。
プロファイルテーブルは、
- ID
- 名前
書籍テーブルは構成されています、
- pid
- 本
- 価格
このクエリを使用して、特定のIDのこれら2つのテーブルからレコードを削除できます。
delete profile,books from profile,books where profile.id=18 and profile.id=books.pid;
所属していません StackOverflow