2012-03-13 3 views
2

자식 레코드로 부모 레코드의 모든 데이터를 가져옵니다 :나는 테이블이

1 NULL MyPrefix 
2 1  MyPrefix 

여러 조인을 시도했지만 여전히 NULL 접두어로 끝납니다.

편집 : 이것은 내가 들어 왔로 아마 가까운 : 오래된 조인 구문에 대한

SELECT 
    ra.RequestID 
    ,CASE WHEN rb.Prefix IS NULL THEN ra.Prefix ELSE ra.Prefix END AS Prefix 
FROM requests ra 
LEFT JOIN requests rb on ra.RequestID = rb.PrimaryRequestID 
+0

? 이미 수행 한 작업에 올바른 방향으로 약간의 푸시가 필요할 수도 있기 때문에 작업을 표시하는 것이 좋습니다. – Taryn

답변

1

보십시오 : 당신이 시도 것을

select S.RequestId, S.PrimaryRequestID, coalesce(P.Prefix, S.Prefix) As Prefix 
from myTable P 
right join myTable S on P.RequestID = S.PrimaryRequestID 
+0

자식 레코드에 대한 NULL requestID로 끝납니다. –

+0

(** 오타 수정) ** 오른쪽 ** 가입이 필요하지 않습니다. 원하는 출력에 표시된대로 기본 요청 레코드에서 PrimaryRequestID로 NULL을 얻습니다. –

+0

좋아 보인다. 고마워. –

0
select c.requestID, 
     c.primaryRequestID, 
     isnull(c.Prefix, p.Prefix) 
from  table p, 
     table c 
where c.primaryRequestID *= p.RequestID 

죄송합니다 .... 이런

+0

이것은 외부 조인을 사용하지 않는 경우를 제외하고는 선택된 대답과 동일한 대답입니다 (병합 및 isnull은 병합이 더 많은 매개 변수를 취할 수있는 동일한 작업을 수행함). –

+0

그래, 좋은 점은 ... 답을 수정합니다. –

+0

구문은 mssql이 아닌 oracle에 유효합니다. –

2

뭔가 트릭을 할 수 있습니다를

시험 데이터

DECLARE @tbl TABLE (RequestID INT,PrimaryRequestID INT,Prefix VARCHAR(100)) 

INSERT INTO @tbl 
VALUES 
    (1,NULL,'MyPrefix'), 
    (2,1,NULL) 

내가 재귀 CTE 기능을 사용하고

;WITH CTE(RequestID,PrimaryRequestID,Prefix) 
AS 
(
    SELECT 
     tbl.RequestID, 
     tbl.PrimaryRequestID, 
     tbl.Prefix 
    FROM 
     @tbl AS tbl 
    WHERE 
     tbl.PrimaryRequestID IS NULL 
    UNION ALL 
    SELECT 
     tbl.RequestID, 
     tbl.PrimaryRequestID, 
     CTE.Prefix 
    FROM 
     @tbl AS tbl 
     JOIN CTE 
      ON tbl.PrimaryRequestID=CTE.RequestID 
) 
SELECT 
    * 
FROM 
    CTE 

자세히보기 쿼리에 대한 그 here

당신은 예를 들어 테이블에 한 번 더 라인이있는 경우.

1   NULL    MyPrefix 
2   1       NULL 
3 2  NULL 

그런 다음 출력은 여전히 ​​다음과 같이 될 것입니다 : 그래서 당신의 표는이처럼

1   NULL    MyPrefix 
2   1       MyPrefix 
3 2  MyPrefix 

Becuase 나는 테이블에서 부모 자식 관계를 사용하고 있습니다.

몇 가지 예를 원한다면. Here, here, herehere에 유래에 대한 몇 가지 예입니다

+0

자체에서 CTE에 가입하고 있습니까? 그 일은 한번도 본 적이 없어. –

+0

예. 업데이트 된 답변보기 – Arion

+0

thanks man! 나는 그것에 대해 읽을 게. –