SQL Server查询以查找子项的父级名称

3

i have a table like this

ID  Name    Mother  Father
1   Sue     NULL    NULL
2   Ed      NULL    NULL
3   Emma    1       2
4   Jack    1       2
5   Jane    NULL    NULL
6   Bonnie  5       4
7   Bill    5       4

我需要以下输出结果

ID  Name    Mother  Father
3   Emma    sue     ed
4   jack    sue     ed
6   bonnie  jane    jack
7   bill    jane    jack

我尝试使用连接和CTE编写查询,但无法想出逻辑。请有人帮我解决问题。
3个回答

4
SELECT t.ID, t.Name, m.Name, f.Name
FROM your_table t
INNER JOIN your_table m ON m.ID = t.Mother
INNER JOIN your_table f ON f.ID = t.Father

如果您想包含没有Mother和/或Father节点的记录,请使用LEFT JOIN

SELECT t.ID, t.Name, ISNULL(m.Name, 'Orphan') Mother, ISNULL(f.Name, 'Orphan') Father
FROM your_table t
LEFT JOIN your_table m ON m.ID = t.Mother
LEFT JOIN your_table f ON f.ID = t.Father

0
尝试如下代码:
select 
    p.id, p.name, p1.name as mother, p2.name as father
from people p
inner join people p1 on p1.id = p.mother
inner join people p2 on p2.id = p.father

-2

选择查询

SELECT A.*    
FROM tbl A   
    ,tbl M    
    ,tbl F    
WHERE A.Mother = M.ID     
    AND A.Father = F.ID    

不使用内连接...


这仍然是一个INNER JOIN。 - Taryn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接