我有一个具有id,name,level(深度)和parrent_id的表,有没有什么好方法可以删除没有子节点的所有节点? (在一个层面上就足够了)? 我知道我可以在应用程序中执行它 - 加载给定级别的所有节点并检查它们是否有子节点,如果没有删除,但这可能在SQL中更有效并且我不是SQL大师:)
答案 0 :(得分: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)
答案 1 :(得分:2)
SELECT * FROM mytable where id in (SELECT parent_id from mytable)
这应该做的工作