2010-02-12 117 views
1

我有了ID,名称,等级(深度)和parrent_id,有没有什么好的方法来消除所有节点没有任何孩子的表? (在一个水平上足够)? 我知道我可以在应用程序中执行它 - 加载给定级别上的所有节点,并检查它们是否有孩子,如果不删除,但这可能会在SQL中更有效,我不是SQL大师:)如何在SQL中删除所有没有孩子的父母?

回答

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) 
+0

问题是要删除那些没有儿童的问题 – anthares 2010-02-12 08:19:42

+0

好的,对不起,我明白你的意思了。应更改为* IS NOT NULL * – 2010-02-12 08:20:29

+1

没错,我听错了第一次,太:) – anthares 2010-02-12 08:22:30

2
SELECT * FROM mytable where id in (SELECT parent_id from mytable) 

这应该做的工作

相关问题