MYSQL从不同列中删除多行或单行

时间:2017-01-13 16:39:43

标签: mysql

我正在尝试删除我创建的帖子,但该帖子也可能有喜欢或评论。

显然,如果我尝试删除帖子,我希望能够删除这些评论或喜欢!

现在我有一些有用的代码。

此代码:

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'

删除帖子,但仅限于有某些活动(例如喜欢或评论),但如果没有喜欢或评论它不会删除帖子...

如果可能,我可以帮助尝试理解为什么会发生这种情况?!

非常感谢能给我留出一些时间的人!

1 个答案:

答案 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选项会自动删除相关的行在删除帖子的那些表格中。