首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >家谱树sql查询

家谱树sql查询
EN

Stack Overflow用户
提问于 2012-11-01 14:18:05
回答 2查看 4.5K关注 0票数 1

我正在使用sql server2008在asp.net中开发家谱应用程序。

我的主表是这样的:

代码语言:javascript
复制
ID int PK
Name Varchar(50)
MotherID int
FatherID int

ID  MotherID FatherID   Name

1   NULL    NULL    My Grand Father

2   NULL    NULL    My Grand Mother

3   someid  someid  My Mother

4   2   1   My Father

5   3   4   Me

6   someid  someid  My wife

7   3   4   My Brother

8   6   5   My son.

我正在寻找这样的输出

代码语言:javascript
复制
ID  MotherID    FatherID    Name        Level

1   someid  someid  grandfather 0


2   someid  someid  Father      1

3   someid  someid  Me      2


4   someid  someid  Brother     2

5   someid  someid  My Son      3

提前谢谢。克什米尔。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-01 14:55:47

试试这个:

代码语言:javascript
复制
;WITH FamilyCTE
AS
(
    SELECT 
      *, 
      CAST(NULL AS VARCHAR(50)) AS FatherName,  
      CAST(NULL AS VARCHAR(50)) AS MotherName, 0 AS Level
    FROM @FamilyTree
    WHERE FatherID IS NULL 
      AND MotherID IS NULL
    UNION ALL
    SELECT 
      f.ID, 
      f.Name AS ParentName, 
      f.MotherID, 
      f.FatherID, 
      c.Name AS FatherName, 
      c2.Name AS MotherName, 
      Level + 1
    FROM @FamilyTree AS F
    INNER JOIN FamilyCTE c ON F.FatherID = c.ID
    INNER JOIN @FamilyTree c2 ON f.MotherID = c2.ID
)

SELECT * FROM FamilyCTE

Demo

如果想要得到像你在问题中发布的那样的精确输出,只需忽略FatherNameMotherName,并将SELECT * FROM FamilyCTE中的选择限制为您想要选择的列,例如,在锚点查询中使用WHERE ID = 1的起始祖父。如下demo所示:

DEMO

票数 4
EN

Stack Overflow用户

发布于 2012-11-01 14:25:15

代码语言:javascript
复制
select t1.ID, t1.MotherID, 
t1.FatherID,
t1.name, 
t2.Name,
Level
from table1 t1
left outer join table2 t2 on t1.FatherID =t2.FatherID 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13171931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档