我需要使用单个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


在上面的三个参考表中,我想使用单个mysql查询删除具有BaseTableID = 1的记录。有没有可能请分享您的想法

最佳答案

我认为这可以做到:

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

关于mysql - 是否可以通过单个查询删除不同表中具有相同外键的记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18266154/

10-10 00:45