2010-02-12 5 views
1

아이디, 이름, 레벨 (깊이) 및 parrent_id가있는 테이블이 있는데 아이없이 모든 노드를 제거하는 좋은 방법이 있습니까? (한 수준에서 충분하다)? 내가 응용 프로그램에서 할 수있는 알고 - 주어진 수준에 모든 노드를로드하고 그들은 아이들이 있는지, 제거하지 않으면 확인하지만이게 아마 SQL에서 더 효과적 일지 모르지만 나는 SQL 전문가가 아닙니다 :)SQL에서 자식이없는 모든 병렬을 제거하는 방법은 무엇입니까?

답변

3

당신이 시도 할 수있는 일을해야

SELECT * 
FROM Table t 
WHERE NOT EXISTS(SELECT 1 FROM Table WHERE ParentID = t.ID) 
을 시도하는 더 나은

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

는 것

+0

질문은 아이들이없는 아이들을 제거하는 것입니다. – anthares

+0

, 죄송합니다. * –

+1

으로 변경해야합니다. 처음으로 잘못되었습니다. – anthares

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

관련 문제