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

时间:2014-03-21 03:18:05

标签: php mysql

如果其余表与参考表相关,则可以删除多个表。

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查询?

1 个答案:

答案 0 :(得分:1)

您的示例基本上生成笛卡尔积。在单个查询中从多个表中删除涉及具有关系的表。由于表之间没有关系,因此您必须逐个删除它们。

此外,您的示例语句必须使用表名限定列名。

  

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

但我们不知道哪个表具有该值。如果任何表不符合条件,则将where子句与 AND 条件放在一起将不会从任何表中删除记录

(TABLE1.username='userA' AND TABLE2.username='userA' AND TABLE3.username='userA')

类似地, OR 条件将删除所有表中的数据,如果其中任何一个表具有与条件匹配的记录。