1

我有一个这样的表,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等于第一行的Bis2和第二行的Bis1仍然有匹配的记录。

有没有办法在不循环记录的情况下做到这一点?

4

1 回答 1

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 演示

于 2013-06-28T08:50:28.170 回答