ant*_*ron 5 sql sql-server sql-server-2008
我需要一些关于SQL代码的帮助.我有2个表,第一个是表名
NameID Name
1 John
2 Paul
3 Jessica
4 Nancy
5 Sam
6 Jane
7 Jimmy
Run Code Online (Sandbox Code Playgroud)
第二个是表Family
FamilyID NameID ChildID
1 1 2
2 1 3
3 2 4
4 3 5
5 3 6
6 5 7
Run Code Online (Sandbox Code Playgroud)
表Family中的字段"NameID"和"ChildID"连接到表Name中的字段"NameID".所以,如果我把它放在一棵树上就会是这样的
John
/ \
Paul Jessica
/ / \
Nancy Sam Jane
/
Jimmy
Run Code Online (Sandbox Code Playgroud)
我需要的是SQL代码,可以找到"所有"父母的特定记录.例如 :
我想知道Jimmy的所有父母,结果将是:Sam,Jessica,John
我想知道南希的所有父母,结果将是:保罗,约翰
在这里,使用递归 CTE,如下所示:
DECLARE @pName VARCHAR(20)
SET @pName = 'Jane'
;WITH RecursiveFamilyCTE
AS (
SELECT
ParentName.NAME,
ParentName.NameID,
f.ChildID
FROM
dbo.Family AS f
JOIN NAME AS ChildName
ON f.ChildID = ChildName.NameID
JOIN Name AS ParentName
ON f.NameID = ParentName.NameID
WHERE
ChildName.NAME = @pName
UNION ALL
SELECT
ParentName.NAME,
ParentName.NameID,
f.ChildID
FROM
dbo.Family AS f
JOIN NAME AS ChildName
ON f.ChildID = ChildName.NameID
JOIN Name AS ParentName
ON f.NameID = ParentName.NameID
JOIN RecursiveFamilyCTE
ON f.ChildID = RecursiveFamilyCTE.NameID
)
SELECT
NAME
FROM
RecursiveFamilyCTE
Run Code Online (Sandbox Code Playgroud)