我有两张这样的table: user_users
ID ColA ColB 55 This That 56 Other Stuff
user_meta
```
ID UserID MetaName MetaValue
1 56 some_name some_value
2 56 other_name other_vaue
3 99 this_too equals_this
因此,可以在 `user_meta` 归属于给定 `UserID` . 删除用户时,还需要删除 `user_meta` 属于该用户的表。
以下是我所拥有的: `DELETE user_users, user_meta FROM user_users LEFT JOIN user_meta ON user_meta.UserID = user_users.ID WHERE user_users.ID = 56` 这在以下情况下非常有效:
如果用户存在于 `user_users` 但中不存在此用户的行 `user_meta` 如果用户存在于 `user_users` 中存在此用户的行 `user_meta` 问题是如果(出于某种原因)用户id存在于 `user_meta` 但不是在 `user_users` ,则不会从 `user_meta` table。
出于所有实际原因,这个查询应该在所有情况下都能工作(因为您如何为一个不存在的用户保存user meta?),但为了以防万一,我想确保查询也会删除 `user_meta` 带有 `UserID` 即使该用户不存在于 `user_users` table。
所以,我希望这个查询删除 `user_meta` 带的表格 `UserID = 99` 但事实并非如此,因为没有 `ID` 存在于 `user_users` 表格:
DELETE user_users, user_meta FROM user_users LEFT JOIN user_meta ON user_meta.UserID = user_users.ID WHERE user_users.ID = 99
如何更新此查询以从其中一个/两个表中删除,而不管其他表中是否存在id?
1条答案
按热度按时间dvtswwa31#
这种情况很适合使用级联删除约束。你想把孩子的档案
user_meta
表中的父记录时要删除的表user_users
已删除。假设已存在外键约束UserID
在user_meta
表,您可以尝试:这假设您已经在上有了外键约束
user_meta#UserID
. 如果你没有,那就忽略第一个ALTER TABLE
声明。使用此约束,从
user_users
将自动导致所有子记录user_meta
将被删除。