MySQL从多个表中删除行

时间:2013-07-29 13:11:25

标签: php mysql

我有2个表用户,pd有一个公共列i_uid

为了从两个表中删除i_uid为1010的单行我在php脚本中使用mysqli :: query发出以下语句

DELETE 
FROM `users`,`pd`
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010;

有什么不对吗?

4 个答案:

答案 0 :(得分:6)

因为要从多个表中删除行,所以唯一缺少的是指定将删除行的表,

DELETE `users`,`pd`
FROM `users`, `pd`
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010;

在上面的查询中,它将从两个表中删除行。我建议使用ANSI连接更改语句,如下所示,

DELETE  a, b 
FROM    users a
        INNER JOIN pd b
            ON a.i_uid = b.i_uid
WHERE  a.i_uid = 1010

如果要从users表中删除

DELETE  a
FROM    users a
        INNER JOIN pd b
            ON a.i_uid = b.i_uid
WHERE  a.i_uid = 1010

答案 1 :(得分:1)

使用Left Join并指定将删除相应行的表。

DELETE users, pd
FROM users, pd
LEFT JOIN pd
ON pd.i_uid = users.i_uid
WHERE users.i_uid = 1010

答案 2 :(得分:1)

其他答案是正确的,但由于没有人提到它我会。您可以使用 InnoDB 引擎并指定外键和 DELETE ON CASCADE 。因此,每次删除用户时,它都将删除不同表中的所有引用行。

阅读外键和DELETE ON CASCADE

答案 3 :(得分:0)

为了简单起见,我建议只使用两个查询:

DELETE FROM `users` WHERE `i_uid` = 1010;
DELETE FROM `pd` WHERE `i_uid` = 1010;