2011-03-10 3 views
1

은 좀 공상 조인으로 쿼리를 작성하려합니다. 이 작업을 수행 할 수 있음을 알고 있지만 작업 수행 방법을 기억하지 않습니다. 나는이 내 쿼리의 from 부분에 select 절없이 실행 얻기 위해 노력했다그들에 다시 두 개의 테이블을 조인 자아 함께

SELECT parentLink.SourceWorkItemID, parentLink.TargetWorkItemID, 
      childLink.SourceWorkItemID, childLink.TargetWorkItemID, 
      childLink.WorkItemLinkTypeSK--,childLinkType.LinkName 
FROM dbo.FactWorkItemLinkHistory parentLink 
     JOIN dbo.DimWorkItemLinkType parentLinkType (NOLOCK) 
      ON parentLink.WorkItemLinkTypeSK = parentLinkType.WorkItemLinkTypeSK 
     LEFT JOIN dbo.FactWorkItemLinkHistory childLink (NOLOCK) 
      ON parentLink.TargetWorkItemID = childLink.SourceWorkItemID 
      AND childLink.RemovedByPersonSK IS NULL 
      AND childLink.WorkItemLinkTypeSK IN 
       (SELECT sublink.WorkItemLinkTypeSK 
       FROM dbo.DimWorkItemLinkType sublink 
       WHERE sublink.LinkName = 'Child' 
       ) 
     --LEFT JOIN dbo.DimWorkItemLinkType childLinkType (NOLOCK) 
     -- ON childLink.WorkItemLinkTypeSK = childLinkType.WorkItemLinkTypeSK 
     -- AND childLinkType.LinkName = 'Child'    
WHERE parentLink.SourceWorkItemID = 1917 
     AND parentLink.RemovedByPersonSK IS NULL   
     AND parentLinkType.LinkName = 'Releases Story' 

하지만 저를 벗어난 유지 : 그것은 지금처럼

여기 내 쿼리입니다.

내가 찾고 있어요 결과는 뭔가에게 이것이다

1917 1915 1915 1916 2 
1917 1913 1913 1914 2 
1917 1913 1913 4349 2 
1917 1921 1921 1922 2 
1917 1918 NULL NULL NULL 
1917 1920 NULL NULL NULL 

나는 from 절에 select을 사용하여 해당 결과를 얻을 수 있지만, 내가 그것을 피할 수 있다면 차라리 거기 select를 사용하지 않을 것입니다.

나는이 변화를 시도 :

  1. 의 주석이 마지막 조인 (주 select 절에서 childLinkType.LinkName)
  2. 원치 않는 select 절 (조인 마지막으로 위의 라인)를 제거합니다. 내가 할 때

나는이 얻을 :

너무 많은 행이
1917 1915 1915 1916 2 Child 
1917 1915 1915 1917 20 NULL 
1917 1915 1915 1919 7 NULL 
1917 1915 1915 1911 4 NULL 
1917 1913 1913 1914 2 Child 
1917 1913 1913 1917 20 NULL 
1917 1913 1913 1911 4 NULL 
1917 1913 1913 4349 2 Child 
1917 1921 1921 1922 2 Child 
1917 1921 1921 1917 20 NULL 
1917 1918 1918 1919 7 NULL 
1917 1918 1918 1912 4 NULL 
1917 1918 1918 1917 20 NULL 
1917 1920 1920 1911 4 NULL 
1917 1920 1920 1917 20 NULL 

. 그리고 DimWorkItemLinkType 테이블에서 nulls가 일치하는 것을 원하지 않습니다. 그래서 나는 마지막 join을 inner join으로 만든다. 그럼 난이 얻을 : (첫 번째 데이터 세트에서 1918 1920)는 "아이"가없는 항목을 제거했습니다

1917 1915 1915 1916 2 Child 
1917 1913 1913 1914 2 Child 
1917 1913 1913 4349 2 Child 
1917 1921 1921 1922 2 Child 

합니다. 나는 아직도 내 결과에서 그들을 필요로한다. 나는이 나에게 결과의 첫 세트를주고받을 여전히 (절에서에서) 선택을 제거 할 수있는 방법

어떤 아이디어?

참고 : 나는 (보고 목적으로 승인 테이블을 사용하여) TFS에 TFS_Warehouse 데이터베이스에 대해 2010 서버를이를 실행하고 있습니다. 다른 사람이 말했듯이, 그것을 파괴하고 단순화하기 위해 노력하고 가치가있을 수도 있습니다 - -

+1

가 보인다, 우리에게 세부 사항에 대한 커다란 질문을 던지기보다는. 아무도이 문제를 해결하고 싶어하지 않는 것 같습니다. 그냥 생각. - P – richard

+0

그냥 하위 쿼리를 제거하려면 다음 난 당신이 임시 테이블을 사용할 수 있습니다 제안하고 실행하는 대신에 합류했다. – pavanred

+0

은 내가 TFS_Warehouse 실행이 없습니다. 출력을 게시했지만 입력을 생략했습니다. 주어진 산출물에 대한 실제 투입물을 게시하면 더 많은 사람들이 귀하를 도울 수 있습니다. –

답변

1

글쎄, 난 정말 당신의 질문을 이해 척하지 않으며 나는 TFS_Warehouse이없는,하지만 난 기회를 가지고 (분명히 안된)이 같은 구조 뭔가를 찾고 있다는 것을 추측 할 것 : (제목이 암시처럼) 당신이 일반적으로 문제를 제기하면 더 많은 답변을 얻을 수 있습니다처럼

SELECT parentLink.SourceWorkItemID, parentLink.TargetWorkItemID, 
      childLink.SourceWorkItemID, childLink.TargetWorkItemID, 
      childLink.WorkItemLinkTypeSK--,childLinkType.LinkName 
FROM dbo.FactWorkItemLinkHistory parentLink 
     JOIN dbo.DimWorkItemLinkType parentLinkType (NOLOCK) 
      ON parentLink.WorkItemLinkTypeSK = parentLinkType.WorkItemLinkTypeSK 
     LEFT JOIN 
      (dbo.FactWorkItemLinkHistory childLink (NOLOCK) 
      INNER JOIN dbo.DimWorkItemLinkType childLinkType (NOLOCK) 
       ON childLink.WorkItemLinkTypeSK = childLinkType.WorkItemLinkTypeSK 
       AND childLinkType.LinkName = 'Child') 
      ON parentLink.TargetWorkItemID = childLink.SourceWorkItemID 
      AND childLink.RemovedByPersonSK IS NULL 
WHERE parentLink.SourceWorkItemID = 1917 
     AND parentLink.RemovedByPersonSK IS NULL   
     AND parentLinkType.LinkName = 'Releases Story' 
+0

완벽한! 완벽하게 일했습니다! 제 질문에 답변 해 주셔서 감사합니다. – Vaccano

관련 문제