递归多对多CTE

时间:2017-12-04 06:55:14

标签: sql sql-server common-table-expression recursive-query

我不是数据库专家试图为sql server 2012的下面的场景编写cte但是无法解决我的问题。感谢有人帮我解决这个问题。

我有一个叫做Jockcard2Item的多对多表用于表Jobcard和items。

Jobcard可能有多个项目,而且项目可以有多个Jobcards,

在我的情况下,我想查找给定项目ID的所有Jobcards,如bellow。

  • jobcard1具有第1项,第2项。
  • jobcard2有第2项,第3项
  • jobards3有第3项
  • jobcard4有第4项
  

我希望获得与给定项目相关联的所有作业卡,如果有的话   引用相同的工作卡的项目(如jobcard2指的   item2)也希望包括那张工作卡。

     

结果应返回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

当我将12作为item_ID传递时,它应该返回结果 - 512,513,514,

1 个答案:

答案 0 :(得分: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(我试过,但我认为这是不可能的)。