删除多个表,即使没有关系


Delete multiple tables even without relationship

如果其他表与引用表相关,则可以删除多个表。

TABLE1              |   TABLE2              |   TABLE3
id      username    |   id      username    |   id      username
1       userA       |   1       userA       |   1       userA
2       userB       |   2       userB       |   2       userB

DELETE T1, T2, T3 FROM TABLE1 T1
LEFT JOIN TABLE2 T2 ON T2.username='$user'
LEFT JOIN TABLE3 T3 ON T3.username='$user'
WHERE T1.username='$user'

现在我不知道如何处理引用表(在T1上面的代码中是引用)与另一个表不相关的情况。

TABLE1              |   TABLE2              |   TABLE3
id      username    |   id      username    |   id      username
1       userC       |   1       userA       |   1       userA
2       userD       |   2       userB       |   2       userB

的例子:

DELETE FROM TABLE1, TABLE2, TABLE3 WHERE username='userA'

我必须一个接一个地删除它们,还是有一个现有的MYSQL查询?

你的例子基本上产生笛卡尔积。在单个查询中从多个表中删除涉及到具有关系的表。由于表与表之间没有关系,您将不得不逐个删除它们。

您的示例语句还必须用表名限定列名。

DELETE FROM表1,表2,表3 WHERE username='userA'

但是我们不知道哪个表有这个值。如果任何表不满足条件

,则使用带有AND条件的where子句不会从任何表中删除记录。
(TABLE1.username='userA' AND TABLE2.username='userA' AND TABLE3.username='userA')

同样,OR条件将删除所有表中的数据,如果其中任何一个表中有匹配条件的记录。