gpt4 book ai didi

sql - 根据特定记录查找所有 parent

转载 作者:行者123 更新时间:2023-12-03 00:10:24 24 4
gpt4 key购买 nike

我需要一些有关 SQL 代码的帮助。我有2个表,第一个是表名

NameID   Name      
1 John
2 Paul
3 Jessica
4 Nancy
5 Sam
6 Jane
7 Jimmy

第二个是表Family

 FamilyID   NameID    ChildID
1 1 2
2 1 3
3 2 4
4 3 5
5 3 6
6 5 7

表 Family 中的字段“NameID”和“ChildID”连接到表 Name 中的字段“NameID”。所以如果我把它放在一棵树上它就会像这样

         John
/ \
Paul Jessica
/ / \
Nancy Sam Jane
/
Jimmy

我需要的是可以找到特定记录的“所有”父项的 SQL 代码。例如:

  1. 我想了解 Jane 的所有 parent ,结果将是:Jessica,约翰
  2. 我想了解吉米的所有 parent ,结果将是:山姆,杰西卡、约翰

  3. 我想了解 Nancy 的所有家长,结果将是:Paul、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

关于sql - 根据特定记录查找所有 parent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30836818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com