1

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

4

2 回答 2

3

你可以试试

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)
于 2010-02-12T08:17:36.020 回答
2
SELECT * FROM mytable where id in (SELECT parent_id from mytable)

这应该做的工作

于 2010-02-12T08:14:12.373 回答