使用JOIN的DELETE FROM查询不起作用?

时间:2011-08-20 17:59:39

标签: mysql join

我有以下MySQL查询,我正在使用PHP(5.2)。

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

然而,我的意图并没有发挥作用(没有任何反应!),让我解释一下:

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

我希望查询结构自我解释,topic_id主要用于JOIN表格。

查询运行正常(没有MySQL或PHP错误,所以我假设语法没问题?),我已经检查了存在的数据库和主题被删除(deleted列已设置到1)和他们的帖子以及那些主题的存在(所以不存在没有数据的情况)。

感谢所有回复。

1 个答案:

答案 0 :(得分:5)

我个人倾向于始终明确指定连接,而不是将所有内容都放在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

现在,根据您的陈述,我建议将第二个INNER JOIN更改为LEFT JOIN:

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

我希望有所帮助!