2012-09-27 6 views
0

참조 테이블이 어디 부모 자식 참조 SQL 쿼리

Ref_ID PARENT_ID  
------------------- 
1   1    
2   1    
1   2  
3   2  
1   3  
3   3  
4   3  
2   4  
3   4  

가에서 REF_ID (2, 3) 이 조인을 사용하는 대신 사용하는 모든 별개의 부모 행을 반환하려고 다음과 같이 나는 부모 + 참조 테이블이 (사용자에 따라 4-7 테이블이 쿼리에있다 - 하위 쿼리 하지만 중복은 어떤 도움이 참고

을 감사 질의

가입을 통해 부모에 대해 반환되는 선택) 그래서 성능이 큰 요인

답변

0

좋아,

먼저 코드

DECLARE @Temp TABLE(
Ref_ID int, 
ParentID int 
) 

INSERT INTO @Temp VALUES (1 , 1) 
INSERT INTO @Temp VALUES (2 , 1) 
INSERT INTO @Temp VALUES (1 , 2) 
INSERT INTO @Temp VALUES (3 , 2) 
INSERT INTO @Temp VALUES (1 , 3) 
INSERT INTO @Temp VALUES (3 , 3) 
INSERT INTO @Temp VALUES (4 ,3) 
INSERT INTO @Temp VALUES (2 , 4) 
INSERT INTO @Temp VALUES (3 , 4) 

--First Example witout Ref_ID 
SELECT 
    DISTINCT ParentID 
FROM @Temp 
WHERE Ref_ID IN (2,3) 

--SECOND Example With Ref_ID 
SELECT 
    DISTINCT ParentID, 
    Ref_ID 
FROM @Temp 
WHERE Ref_ID IN (2,3) 

첫 번째 쿼리가 ParentID의의 독특한 기록을 반환을보십시오. Ref_Id도 요청하지 않았기 때문에 정상적으로 작동합니다.

Ref_ID를 요청할 때 설명하기 만하면 쿼리가 다른 ParentID를 반환하려고 시도합니다. 하지만 두 개의 ParentID가 4 과 같습니다. 그러나 Ref_ID가 다르면이므로 두 사람 모두 반환합니다. 둘 다 쿼리 규칙과 일치합니다. enter image description here

+1

통찰력을 주셔서 감사합니다, 나는 별개 또는 하위 쿼리를 무효화하는 "마법의 절"이있을 것으로 생각합니다. :) – Kumar

0

에게 인이

select distinct parent_field1,parent_field2 
from parent left outer reference 
on parent.parent_id=reference.parent_id 
where reference.ref_id(2,3) 
관련 문제