我正在尝试删除我创建的帖子,但该帖子也可能有喜欢或评论。
显然,如果我尝试删除帖子,我希望能够删除这些评论或喜欢!
现在我有一些有用的代码。
此代码:
DELETE p, a, n
FROM Posts p
INNER JOIN Activity a ON a.uuidPost = p.uuid
LEFT OUTER JOIN Notifications n ON n.uuidPost = p.uuid
WHERE p.uuid = '$uuid'
删除帖子,但仅限于有某些活动(例如喜欢或评论),但如果没有喜欢或评论它不会删除帖子...
如果可能,我可以帮助尝试理解为什么会发生这种情况?!
非常感谢能给我留出一些时间的人!
答案 0 :(得分:1)
使用INNER JOIN
时,它只返回两个表之间匹配的行,DELETE
仅删除JOIN
返回的行。如果你想删除帖子,即使它们在Activity
中没有匹配,你应该使用LEFT OUTER JOIN
- 这将返回第一个表中的行,即使它们没有匹配。
DELETE p, a, n
FROM Posts p
LEFT OUTER JOIN Activity a ON a.uuidPost = p.uuid
LEFT OUTER JOIN Notifications n ON n.uuidPost = p.uuid
WHERE p.uuid = '$uuid'
顺便说一句,如果您将uuidPost
声明为ON DELETE CASCADE
的外键,则根本不需要使用联接 - CASCADE
选项会自动删除相关的行在删除帖子的那些表格中。