当关系不可识别时,从多个表中删除

时间:2014-07-28 17:32:18

标签: mysql sql

我有这两个表:

| User   |
|--------|
| u_id*  |
| p_id   | ← NULLABLE

| Person |
|--------|
| p_id*  |

简单来说:

User可以在没有相关人的情况下存在。

问题是:

  

如何在同一查询中删除用户?#

到目前为止,我有这个:

DELETE `user`, `person`
FROM `user`
INNER JOIN `person`
WHERE `user`.`p_id` = `person`.`p_id`
AND `u_id` = 1000

对于与某个人相关的用户,它可以正常工作,但如果用户没有相关人员(p_id = NULL),则不会删除该用户。

所以现在的问题是:

  

如果用户发生与某人相关,如何在同一查询中删除用户及其人员?

2 个答案:

答案 0 :(得分:3)

使用left join代替

DELETE `user`, `person`
FROM `user`
LEFT JOIN `person` ON `user`.`p_id` = `person`.`p_id`
WHERE `u_id` = 1000

答案 1 :(得分:2)

我会在您的外键定义中添加ON DELETE CASCADE。然后只需删除用户,不要担心子行,因为它们将由级联删除处理。一些链接: