2017-12-04 12 views
1

DB 전문가가 아니기 때문에 SQL Server 2012에 대해 아래 시나리오에서 cte를 작성하려고했지만 내 문제를 해결할 수 없습니다. 어떤 사람이 이것을 알아낼 수있게 도와 주시면 감사하겠습니다.재귀 다 대다 CTE

테이블 Jobcard 및 항목에 대해 Jockcard2Item이라는 테이블이 여러 개 있습니다. 내 경우에는

내가 울부 짖는 소리와 같은 주어진 항목 ID에 대한 모든 Jobcards을 찾으려면,

작 w +는 여러 항목을 가질 수 있으며, 아이템은 많은 Jobcards을 가질 수 있습니다.

  • jobcard1 가진 항목 1, 항목 항목 2를 가진 2
  • jobcard2, 항목 3
  • jobards3 갖는 제 3
  • jobcard4 갖는 제 4

내가 싶어 주어진 아이템과 관련된 모든 직업 카드, 다른 사람이있는 경우 동일한 jobcard를 참조하는 항목 (예 : item2를 나타내는 jobcard2)에 포함하려는 항목 그 일자리 카드도.

결과는 내가 쿼리 아래 무한 실행되는려고

, jobcard1, jobcard3, jobcard3를 반환해야합니다. 짖는 소리

DECLARE @itemId int 
SELECT @itemId = 12 

;WITH temp as(
    SELECT jobCard_ID, item_id FROM Jobcard2Item 
    WHERE item_id = @EstimateID 

    UNION ALL 

    SELECT bi.jobCard_ID ,bi.item_id FROM Jobcard2Item 
    JOIN temp x ON bi.jobCard_ID= x.jobCard_ID where x.item_id not IN (bi.item_id) 
) 

select * from temp option (maxrecursion 0) 

샘플 날짜는

id jobcard_ID, item_ID 
1  512   12 
2  512   13 
3  513   13 
4  513   14 
5  514   14 
6  515   15 
7  516   16 

는 결과를 반환해야합니다 ITEM_ID으로 내가 12을 통과

- 512,513,514을,이 쿼리는 도움이

+0

샘플 데이터를 제공하면 많은 도움이됩니다. –

+0

샘플 데이터를 추가했습니다. 제발 좀 봐 주실 래요? – inspiedar

답변

1

:

select distinct A.jobcard_id from Jockcard2Item A join Jockcard2Item B 
on A.jobcard_id = B.jobcard_id or A.item_id = B.item_id 
where A.item_id <> B.item_id or A.jobcard_id <> B.jobcard_id 

CTE는 필요하지 않습니다 (시도했지만 불가능하다고 생각합니다).