【发布时间】:2010-02-12 08:12:47
【问题描述】:
我有一个包含 id、名称、级别(深度)和 parrent_id 的表,有没有什么好的方法可以删除所有没有子节点的节点? (一层就够了)? 我知道我可以在应用程序中做到这一点 - 加载给定级别的所有节点并检查它们是否有子节点,如果没有删除,但这可能在 SQL 中更有效,我不是 SQL 大师 :)
【问题讨论】:
标签: sql mysql adjacency-list
我有一个包含 id、名称、级别(深度)和 parrent_id 的表,有没有什么好的方法可以删除所有没有子节点的节点? (一层就够了)? 我知道我可以在应用程序中做到这一点 - 加载给定级别的所有节点并检查它们是否有子节点,如果没有删除,但这可能在 SQL 中更有效,我不是 SQL 大师 :)
【问题讨论】:
标签: sql mysql adjacency-list
你可以试试
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)
【讨论】:
SELECT * FROM mytable where id in (SELECT parent_id from mytable)
这应该可以完成工作
【讨论】: