Mysql 是否从联接不起作用的查询中删除?

Mysql 是否从联接不起作用的查询中删除?,mysql,join,Mysql,Join,我有下面的MySQL查询,我在PHP(5.2)中使用它 但是,它也无法发挥我的预期作用(什么也没有发生!),让我解释一下: 我打算查询要做的是删除论坛帖子表中的所有行和/或(我说的是“和/或”,因为这取决于这些行是否存在)删除用户点表=>中的所有行[如果创建帖子的主题已被删除(为了您的信息,以避免混淆,这实际上只是“隐藏”,我们通过检查它是否等于1)]来确定它 我希望查询结构能够自我解释,topic\u id主要用于将表连接在一起 查询运行正常(没有MySQL或PHP错误,因此我假设语法正常?)

我有下面的MySQL查询,我在PHP(5.2)中使用它

但是,它也无法发挥我的预期作用(什么也没有发生!),让我解释一下:

我打算查询要做的是删除
论坛帖子
表中的所有行和/或(我说的是“和/或”,因为这取决于这些行是否存在)删除
用户点
表=>中的所有行[如果创建帖子的主题已被删除(为了您的信息,以避免混淆,这实际上只是“隐藏”,我们通过检查它是否等于
1
)]来确定它

我希望查询结构能够自我解释,
topic\u id
主要用于
将表连接在一起

查询运行正常(没有MySQL或PHP错误,因此我假设语法正常?),我已经检查了数据库,并且删除了存在的主题(删除的
deleted
列设置为
1
),这些主题也存在他们的帖子(因此没有数据)


感谢所有回复。

我个人倾向于总是显式指定连接,而不是将所有内容都集中在where子句中。这也有助于可视化可能需要左连接的位置

DELETE forum_posts t1, user_points t3
    FROM forum_posts AS t1
    INNER JOIN forum_topics AS t2 ON t2.topic_id = t1.topic_id
    INNER JOIN user_points AS t3 ON t3.id = t1.post_id
        AND t3.profile_author = t1.post_author
        AND t3.type = 'post'
WHERE t2.deleted = 1
现在,根据您的陈述,我建议将第二个内部联接更改为左联接:

DELETE forum_posts t1, user_points t3
    FROM forum_posts AS t1
    INNER JOIN forum_topics AS t2 ON t2.topic_id = t1.topic_id
    LEFT JOIN user_points AS t3 ON t3.id = t1.post_id
        AND t3.profile_author = t1.post_author
        AND t3.type = 'post'
WHERE t2.deleted = 1

我希望这会有帮助!

尝试用
选择
替换
删除
,看看是否得到要删除的行。@Vache,我刚刚尝试过,但它没有返回任何内容,然后我尝试删除用户点部分,它为帖子返回了行,因为点不存在,我认为这是问题所在,是他们的方法吗检查它是否存在于查询中?
DELETE forum_posts t1, user_points t3
    FROM forum_posts AS t1
    INNER JOIN forum_topics AS t2 ON t2.topic_id = t1.topic_id
    LEFT JOIN user_points AS t3 ON t3.id = t1.post_id
        AND t3.profile_author = t1.post_author
        AND t3.type = 'post'
WHERE t2.deleted = 1