【发布时间】:2017-12-04 06:55:13
【问题描述】:
我不是数据库专家,我试图为 sql server 2012 的以下场景编写 cte,但无法解决我的问题。感谢有人帮助我解决这个问题。
我有一个名为 Jockcard2Item 的多对多表,用于表 Jobcard 和 items。
工作卡可能有多个项目,项目可以有多个工作卡,
在我的情况下,我想找出给定项目 id 的所有工作卡,如下所示。
- 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,
【问题讨论】:
-
提供样本数据会有很大帮助。
-
刚刚添加了示例数据。你能看看吗。
标签: sql sql-server common-table-expression recursive-query