CTE 查询未返回所需结果
CTE Query Not Returning Desired Results
我没有在我的 CTE 查询中得到 return 下方的第一条记录(稍后显示):
这是我的 table:
Key ParentID ChildID (Removed DateJoined Field here)
1 0 1
3 1 83
4 1 84
6 83 85
7 85 86
8 83 87
我的 CTE 查询产生以下结果:
ID Name Date Joined Parent ID Parent Name Level
83 Hanks, James 2014-09-13 1 Golko, Richard 1
84 Hanks, James 2014-09-13 1 Golko, Richard 1
85 Walker, Jamie 2014-09-13 83 Hanks, James 2
87 Newman, Betty 2014-09-20 83 Hanks, James 2
86 Adams, Ken 2014-09-13 85 Walker, Jamie 3
我怎样才能return第一条记录ParentID = 0
?
当我这样调用以下存储过程时:
EXEC UCU_RTG_ProgramStructure_GetMemberTree 0,4
我仍然只得到以 parentID=1 开头的结果,如上所示
这是我的 CTE 查询:
CREATE PROCEDURE [dbo].[UCU_RTG_ProgramStructure_GetMemberTree]
@ParentID int,
@MaxLevel int
AS
WITH matrix
AS
(
--initialization
SELECT UserID, DateJoined, ParentID, 1 AS lvl
FROM dbo.UCU_RTG_ProgramStructure
WHERE ParentID = @ParentID
UNION ALL
--recursive execution
SELECT p.UserID,p.DateJoined,p.ParentID, lvl+1
FROM dbo.UCU_RTG_ProgramStructure p INNER JOIN matrix m
ON p.ParentID = m.UserID
WHERE lvl < @MaxLevel
)
SELECT matrix.UserID, u.LastName + ', ' + u.FirstName AS Member ,DateJoined,ParentID,u2.LastName + ', ' + u2.FirstName AS Parent,lvl
FROM matrix
INNER JOIN dbo.Users u
ON u.UserID = matrix.UserID
INNER JOIN dbo.Users u2
ON u2.UserID = matrix.ParentID
ORDER BY ParentID
CTE 查询很好,只是它没有 return parentID=0 记录
谢谢...
在查看我的 post 以确保它是正确的之后我终于弄明白了:最后的 select 子句是错误的:
SELECT matrix.UserID, u.LastName + ', ' + u.FirstName AS Member ,DateJoined,ParentID,u2.LastName + ', ' + u2.FirstName AS Parent,lvl
FROM matrix
INNER JOIN dbo.Users u
ON u.UserID = matrix.UserID
INNER JOIN dbo.Users u2
ON u2.UserID = matrix.ParentID
最后一个 INNER JOIN 必须更改为 LEFT JOIN,因为没有 UserID 0 可以加入 ParentID 0。
希望这可以帮助其他人进行递归 CTE 查询。
我没有在我的 CTE 查询中得到 return 下方的第一条记录(稍后显示):
这是我的 table:
Key ParentID ChildID (Removed DateJoined Field here)
1 0 1
3 1 83
4 1 84
6 83 85
7 85 86
8 83 87
我的 CTE 查询产生以下结果:
ID Name Date Joined Parent ID Parent Name Level
83 Hanks, James 2014-09-13 1 Golko, Richard 1
84 Hanks, James 2014-09-13 1 Golko, Richard 1
85 Walker, Jamie 2014-09-13 83 Hanks, James 2
87 Newman, Betty 2014-09-20 83 Hanks, James 2
86 Adams, Ken 2014-09-13 85 Walker, Jamie 3
我怎样才能return第一条记录ParentID = 0
?
当我这样调用以下存储过程时:
EXEC UCU_RTG_ProgramStructure_GetMemberTree 0,4
我仍然只得到以 parentID=1 开头的结果,如上所示
这是我的 CTE 查询:
CREATE PROCEDURE [dbo].[UCU_RTG_ProgramStructure_GetMemberTree]
@ParentID int,
@MaxLevel int
AS
WITH matrix
AS
(
--initialization
SELECT UserID, DateJoined, ParentID, 1 AS lvl
FROM dbo.UCU_RTG_ProgramStructure
WHERE ParentID = @ParentID
UNION ALL
--recursive execution
SELECT p.UserID,p.DateJoined,p.ParentID, lvl+1
FROM dbo.UCU_RTG_ProgramStructure p INNER JOIN matrix m
ON p.ParentID = m.UserID
WHERE lvl < @MaxLevel
)
SELECT matrix.UserID, u.LastName + ', ' + u.FirstName AS Member ,DateJoined,ParentID,u2.LastName + ', ' + u2.FirstName AS Parent,lvl
FROM matrix
INNER JOIN dbo.Users u
ON u.UserID = matrix.UserID
INNER JOIN dbo.Users u2
ON u2.UserID = matrix.ParentID
ORDER BY ParentID
CTE 查询很好,只是它没有 return parentID=0 记录
谢谢...
在查看我的 post 以确保它是正确的之后我终于弄明白了:最后的 select 子句是错误的:
SELECT matrix.UserID, u.LastName + ', ' + u.FirstName AS Member ,DateJoined,ParentID,u2.LastName + ', ' + u2.FirstName AS Parent,lvl
FROM matrix
INNER JOIN dbo.Users u
ON u.UserID = matrix.UserID
INNER JOIN dbo.Users u2
ON u2.UserID = matrix.ParentID
最后一个 INNER JOIN 必须更改为 LEFT JOIN,因为没有 UserID 0 可以加入 ParentID 0。
希望这可以帮助其他人进行递归 CTE 查询。