【问题标题】:How to remove all parrents with no children in SQL?如何在 SQL 中删除所有没有子级的父级?
【发布时间】:2010-02-12 08:12:47
【问题描述】:

我有一个包含 id、名称、级别(深度)和 parrent_id 的表,有没有什么好的方法可以删除所有没有子节点的节点? (一层就够了)? 我知道我可以在应用程序中做到这一点 - 加载给定级别的所有节点并检查它们是否有子节点,如果没有删除,但这可能在 SQL 中更有效,我不是 SQL 大师 :)

【问题讨论】:

    标签: sql mysql adjacency-list


    【解决方案1】:

    你可以试试

    SELECT  DISTINCT tParent.*
    FROM    Table tParent LEFT JOIN
            Table tChild ON tParent.ID = tChild.ParentID
    WHERE   tChild.ID IS NOT NULL
    

    尝试一下会更好

    SELECT  *
    FROM    Table t
    WHERE   NOT EXISTS(SELECT 1 FROM Table WHERE ParentID = t.ID)
    

    【讨论】:

    • 问题是去掉那些没有孩子的
    • 好的,抱歉,我明白你的意思了。应该改为 IS NOT NULL
    • 感谢第二个成功了,但我使用了 NOT EXISTS(适用于所有没有孩子的父母)
    【解决方案2】:
    SELECT * FROM mytable where id in (SELECT parent_id from mytable)
    

    这应该可以完成工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 2021-05-09
      • 2017-12-08
      • 2013-06-09
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多