2013-10-31 3 views
0

내 테이블 구조에 nullable ID 필드 ParentId가 있습니다.이 필드는 테이블의 ID로 다시 매핑하여 계층을 만들 수 있습니다. ParentId는 null입니다. 부모 데이터가있는 ID를 가져올 수 있어야하며 부모가 null 인 모든 데이터를 원합니다. 하지만, 부모가 null이 아닌 행이 2x로 반환되는 행은 원하지 않습니다.결합 및 제외

어떤 유형의 가입을 사용할 수 있습니까? ,

Id 1 ParentId 2 -> ID 2 ParentId Null 
Id 3 ParentId Null -> NULL 

참고 ParentId는 ID가있는 경우 그때는 행으로 반환하지만 생략하지 않으 :

다음은 내가 돌아 싶은지의 예입니다. Id 2가 두 번 포함 되었기 때문에 다음은 잘못되었습니다. 왼쪽에있는 항목이 아닌 오른쪽에만 포함되어야합니다.

Id 1 ParentId 2 -> ID 2 ParentId Null 
Id 2 ParentId Null 
Id 3 ParentId Null 

답변

0

이게 당신이 원하는 것입니까?

SELECT t.ID, t.thingName, t.parentID, pt.thingName as parentName 
FROM things t 
LEFT JOIN things pt on pt.id = t.parentID 

SQL Fiddle (link)에 예제를 설정했습니다.

업데이트 : 부모가없는 레코드가 여전히 표시되도록 LEFT JOIN으로 변경되었습니다. 요청한대로 parentID가 NULL이 아닌 행은 한 번만 반환됩니다. 여전히 찾고있는 것이 아니라면 명확히하십시오.

+0

좋아요, 어떤 행이 두 번 반환되는 것을 원하지 않습니다. 따라서 행이 부모 행인 경우 해당 행을 자식 행으로 반환하지 않으려합니다. –

+0

필자가 제공 한 샘플 쿼리가 요구 사항을 충족시키는 것 같지 않습니까? – Scott

+0

아니요, 이미 하위 행에 추가 된 상위 행을 포함하므로이 필드를 사용할 수 없습니다. 오른쪽 조인에 포함 된 왼쪽 행을 반환하지 않아야합니다. –