我不是数据库专家试图为sql server 2012的下面的场景编写cte但是无法解决我的问题。感谢有人帮我解决这个问题。
我有一个叫做Jockcard2Item的多对多表用于表Jobcard和items。
Jobcard可能有多个项目,而且项目可以有多个Jobcards,
在我的情况下,我想查找给定项目ID的所有Jobcards,如bellow。
我希望获得与给定项目相关联的所有作业卡,如果有的话 引用相同的工作卡的项目(如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,
答案 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(我试过,但我认为这是不可能的)。