0

単一のSQLクエリで、同じ外部キーIDを持つ複数のテーブルすべてのレコードを削除する必要があります。以下に例を挙げましたが、

Table Name : basetable
id | column1
---|---------
 1 |  BCol1
 2 |  BCol2

Table Name : Reftable1

id | BaseTableID | Column1
---|-------------|--------
 1 |      1      | RT1Col1
 2 |      1      | RT1Col2

Table Name : Reftable2

id | BaseTableID | Column1
---|-------------|--------
 1 |      2      | RT2Col1
 2 |      1      | RT2Col2

Table Name : Reftable3

id | BaseTableID | Column1
---|-------------|--------
 1 |      1      | RT3Col1
 2 |      2      | RT3Col2

上記の 3 つの参照テーブルで、単一の mysql クエリで BaseTableID=1 を持つレコードを削除したいと考えています。可能性はありますか?あなたのアイデアを共有してください

4

3 に答える 3

2

これでうまくいくと思います:

DELETE r1, r2, r3
FROM Reftable1 r1
JOIN Reftable2 r2
JOIN Reftable3 r3
WHERE r1.BaseTableID = 1
AND r2.BaseTableID = 1
AND r3.BaseTableID = 1

SQLFIDDLE

一部のテーブルに一致する行がない場合は、次の LEFT JOIN を使用する必要があります。

DELETE r1, r2, r3
FROM basetable b
LEFT JOIN Reftable1 r1 ON b.id = r1.BaseTableID
LEFT JOIN Reftable2 r2 ON b.id = r2.BaseTableID
LEFT JOIN Reftable3 r3 ON b.id = r3.BaseTableID
WHERE b.id = 1

SQLFIDDLE

于 2013-08-16T05:08:48.987 に答える
1

on cascade deleteテーブルを作成するときに指定する必要があります。

baseTable id references BaseTable(id) on delete cascade

詳細については、http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html を参照してください

于 2013-08-16T05:09:18.663 に答える