Sql server SQLServer2008中的递归
Sql server SQLServer2008中的递归,sql-server,recursion,common-table-expression,Sql Server,Recursion,Common Table Expression,select*from MyTable给出以下结果, 现在,如果我通过“胸部”的id,我想获得所有孩子的id 例如,如果我传递了'ChestOne'的id,我想得到下表 我尝试了以下方法,但没有得到结果 ;WITH Temp_CTE AS ( SELECT id ,name ,parent_id FROM dbo.MyTable WHERE id = '12D390AE-FF28-4D50-B3A2-A6CC4E6E02A9' UNION ALL SELECT
select*from MyTable
给出以下结果,
现在,如果我通过“胸部”的id,我想获得所有孩子的id
例如,如果我传递了'ChestOne'的id,我想得到下表
我尝试了以下方法,但没有得到结果
;WITH Temp_CTE AS
(
SELECT
id
,name
,parent_id
FROM dbo.MyTable
WHERE id = '12D390AE-FF28-4D50-B3A2-A6CC4E6E02A9'
UNION ALL
SELECT
CS.id
,CS.name
,CS.parent_id
FROM dbo.MyTable CS
INNER JOIN Temp_CTE ON CS.id = Temp_CTE.parent_id
)
SELECT * FROM Temp_CTE
如何在SQL Server 2008中实现这一点 我认为应该是:
;WITH Temp_CTE AS
(
SELECT
id
,name
,parent_id
FROM dbo.MyTable
WHERE id = '12D390AE-FF28-4D50-B3A2-A6CC4E6E02A9'
UNION ALL
SELECT
CS.id
,CS.name
,CS.parent_id
FROM dbo.MyTable CS
INNER JOIN Temp_CTE ON CS.parent_id = Temp_CTE.id
)
SELECT * FROM Temp_CTE
我认为应该是:
;WITH Temp_CTE AS
(
SELECT
id
,name
,parent_id
FROM dbo.MyTable
WHERE id = '12D390AE-FF28-4D50-B3A2-A6CC4E6E02A9'
UNION ALL
SELECT
CS.id
,CS.name
,CS.parent_id
FROM dbo.MyTable CS
INNER JOIN Temp_CTE ON CS.parent_id = Temp_CTE.id
)
SELECT * FROM Temp_CTE
结果:
id name parent_id
---- ---------- ---------
6D ChestOne 12
CD InCOne 6D
结果:
id name parent_id
---- ---------- ---------
6D ChestOne 12
CD InCOne 6D
试着改变你的加入方式<代码>CS.parent\u id=Temp\u CTE.id上的内部联接临时变量尝试更改您的联接<代码>CS.parent\u id=Temp\u CTE.id上的内部连接温度