2

Table1から削除WHEREConditionID=?ConditionID;

DELETE FROM Table2 WHERE ConditionID=?ConditionID;

DELETE FROM Table3 WHERE ConditionID=?ConditionID;

ConditionIDは、Table1、Table2、Table3に存在する列であり、個別に3回実行するのではなく、1つのクエリ(mysql)で3つすべてを実行する方法はありますか?

4

4 に答える 4

6

3つのテーブルすべてで同じ場合は、複数テーブルの削除構文ConditionIDを使用できるはずです。

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)
于 2010-09-17T23:45:37.550 に答える
1

スキーマがどのように見えるかはわかりませんが、テーブルにInnoDBまたは同様のテーブルエンジンを使用していて、外部キーがある場合は、親エントリが削除されたときに派生エントリが削除される条件を設定できます。詳細については、 http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.htmlを参照してください。

于 2010-09-17T23:42:15.283 に答える
0

mysqlの「delete」クエリを使用するだけで複数のテーブルから行を削除できます。2つのテーブルプロファイルとブックがあることを考慮してください。

プロファイルテーブルは、

  • id
  • 名前

本の表は、

  • pid
  • 価格

このクエリを使用して、特定のIDのこれら2つのテーブルからレコードを削除できます。

delete profile,books from profile,books where profile.id=18 and profile.id=books.pid;
于 2011-10-12T11:01:09.147 に答える
0

いいえ。ConditionIDそれぞれが別々です。同じ名前であるからといって、同じ列であるとは限りません。名前を完全に修飾すると、次のようにわかりやすくなります。

DELETE FROM Table1 WHERE Table1.ConditionID=?ConditionID;

DELETE FROM Table2 WHERE Table2.ConditionID=?ConditionID;

DELETE FROM Table3 WHERE Table3.ConditionID=?ConditionID;
于 2010-09-17T23:41:27.033 に答える