嵌套表元素查询

时间:2013-10-12 10:14:08

标签: sql sql-server recursion nested

MSSQL 我的T1表包含Idname列。就像之前的问题一样,但还有其他任务。

T2Aggregate_IDElement_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,但我现在无法处理它

1 个答案:

答案 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)