2013-10-12 43 views
0

的复杂度我有T1表和Idname列。选择最简单的元素SQL Server递归改变了表

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 4 
1 5 
3 4 
5 6 
5 7 
7 8 

我需要选择像2,4简单的元件,8

复杂性和元件的数目可以变化。

我该如何做到递归?

还有另一项任务:

我需要输出的所有元素简单,其中包括轮。

+0

为什么使用递归? –

+1

你可以举个例子,这个不是很清楚。 – christiandev

回答

2

SQL中的递归解决方案可能非常复杂。在你的情况下,我不需要使用它,因为它只会让你的代码更复杂。

您可以使用CTE如果你仍然坚持: Recursive query in SQL Server

非递归解决方案:
你想只在Element_ID出现在T2的元素,但不是在Aggregate_ID

SELECT Element_ID 
FROM T2 
EXCEPT 
SELECT Aggregate_ID 
FROM T2 

或者如果要显示元素的所有信息:

SELECT * 
FROM T1 
WHERE T1.ID NOT IN (SELECT Aggregate_ID 
        FROM T2) 
+0

非常感谢。我的第一步是CTE,但我不知道该怎么做。 – ifooi

+0

我理解机制,但我需要更多的练习 – ifooi

+0

你可以删除所有'DISTINCT',它们是多余的。 –