删除自我加入中的孤儿

时间:2016-10-24 02:57:01

标签: mysql sql self-join

用例很直接。在查看几百万行的评论表之后。我们意识到有许多孤儿的孩子评论。

以下查询无效

DELETE c.* FROM `comment` c 
where c.parentId not in (select id from `comment`)  

它说的是:

静态分析:

在分析过程中发现了3个错误。

意外的令牌。 (位置7处的“c”附近) 意外的标记。 (位置8附近的“。”) 意外的标记。 (位置9的“*”附近)

MySQL说:文档

1093 - 您无法在FROM子句

中为更新指定目标表'c'

我理解这个问题,但想不出其他选择。我在SQL

非常糟糕

1 个答案:

答案 0 :(得分:1)

您需要使用left join进行此操作:

DELETE c
    FROM comment c  LEFT JOIN
         comment cp
         ON c.parentId = cp.id
    WHERE cp.id IS NULL and c.parentId is not null;

请注意:我认为你应该小心。所有评论真的都有一个评论的父母吗?