1

我有 2 个表 users 和 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

4 回答 4

7

由于您要从多个表中删除行,因此唯一缺少的是指定将在哪些表上删除该行,

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

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

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
于 2013-07-29T13:13:00.523 回答
2

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

DELETE users, pd
FROM users, pd
LEFT JOIN pd
ON pd.i_uid = users.i_uid
WHERE users.i_uid = 1010
于 2013-07-29T13:17:34.483 回答
1

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

阅读外键和 DELETE ON CASCADE

于 2013-07-29T13:20:17.977 回答
0

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

DELETE FROM `users` WHERE `i_uid` = 1010;
DELETE FROM `pd` WHERE `i_uid` = 1010;
于 2013-07-29T13:21:34.870 回答