查询显示父节点下面的所有子节点

问题如下:
例如:
A      B
-----------
A1     B1
A1     B2
B2     BB21
B2     BB22
B21    BBB1
需要得到的结果是
A      B
------------
A1     B1
A1     B2
A1     BB21
A1     BB22
A1     BBB1
B2     BB21
B2     BB22
B2     BBB1
B21    BBB1

--环境
CREATE TABLE _t (A varchar(10), B varchar(10))
insert into _t select 'A1','B1'
UNION ALL SELECT 'A1','B2'
UNION ALL SELECT 'B2','B21'
UNION ALL SELECT 'B2','BB22'
UNION ALL SELECT 'B21','BBB1'
--函数
CREATE FUNCTION F_GET(@A VARCHAR(10))
RETURNS @T TABLE(A VARCHAR(10), B VARCHAR(10),LEVEL INT)
AS
BEGIN
WITH F_TABLE(A,B,LVL)
AS
(
SELECT A,B,0 FROM _T
WHERE A=@A
UNION ALL
SELECT A.A,A.B,B.LVL+1
FROM _T A,F_TABLE B WHERE A.A=B.B
)
INSERT INTO @T
SELECT   * FROM F_TABLE
RETURN
END

--查询
SELECT DISTINCT D.A,B.B FROM _t D
CROSS APPLY DBO.F_GET(D.A) B
--结果
/*
A          B
---------- ----------
A1         B1
A1         B2
A1         B21
A1         BB22
A1         BBB1
B2         B21
B2         BB22
B2         BBB1
B21        BBB1

(9 行受影响)

*/


解决方法二
select A, B from Table
UNION
select P.A A, C.B B from Table P, Table C
where P.B = C.A
posted @ 2006-12-21 15:35  jhtchina  阅读(651)  评论(0)    收藏  举报