我有一个这样的表,A和B作为列:
A B
1 0
2 1
3 2
4 3
可以通过定义A的值来选择记录。如果所选行具有B的值,则还必须选择A的值等于记录B的行,如果所选记录具有B,则必须再次选择等等。
实施例: 如果用户查询A = 3,则返回的行必须为:
A B
3 2
2 1
1 0
由于这种情况,这是输出:A3
的值为B
;有一条记录的A
等于第一行的B
2
而第二条记录的B
是1
,但仍有匹配的记录。
有没有办法可以在不循环记录的情况下完成这项工作?
答案 0 :(得分:2)
您可以使用递归CTE来实现此目的:
http://msdn.microsoft.com/en-us/library/ms186243(v=sql.105).aspx
;WITH RCTE AS
(
SELECT * FROM Table1 WHERE A = 3
UNION ALL
SELECT t.* FROM RCTE r
INNER JOIN Table1 t ON r.B = t.A
)
SELECT * FROM RCTE
<强> SQLFiddle DEMO 强>