MSSQL
我的T1
表包含Id
和name
列。就像之前的问题一样,但还有其他任务。
表T2
与Aggregate_ID
和Element_ID
。
他们交叉
X1:
ID и Name
1 Car
2 Hood
3 Engine
4 Cylinder
5 Wheel
6 tyre
7 rim (car)
8 Rim fixation (Car)
x2:
Aggregate_ID Element_ID
1 2
1 3
1 5
3 4
5 6
5 7
7 8
我需要输出所有最简单的元素,包括像Wheel这样的聚合。在车轮的情况下它将是6.8。 “汽车”将是2,4,6,8 嵌套级别可以更改。这是一个简单的例子。但嵌套水平可以是4,5..20或无限制。
我读了这个http://technet.microsoft.com/ru-ru/library/ms186243(v=sql.105).aspx,但我现在无法处理它
答案 0 :(得分:1)
您可以使用以下查询。它使用公用表表达式。第一部分获取作为参数的聚合。第二部分递归地添加下一个聚合。
然后我选择那些树的叶子聚合(不是父母)。
declare @part as varchar(max) = 'wheel'
;with cte
as
(
select aggregate_id, element_id
from t2 where aggregate_id = (select id from t1 where name = @part)
union all
select t2.aggregate_id, t2.element_id
from t2
inner join cte on cte.element_id = t2.aggregate_id
)
select distinct c1.element_id from cte c1
where not exists (select * from cte c2 where c1.element_id = c2.aggregate_id)