我有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;
有什么不对吗?
答案 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;