SQL查找父母特定孩子的祖父母

时间:2017-11-01 13:21:20

标签: sql hierarchical-data recursive-query

所以,我基本上有两张桌子狗和垃圾

表狗:

ID(PK)        Litter_ID       Name
---------------------------------  
1             null        Fido

2             null        Freda

3             11          Pedro

4             11          John

5             22          Maria

6             33          Billy
7

桌上垃圾:

Litter_ID (PK)------Father_id---------- Mother_id

11---------------------1-----------------2

33---------------------4-----------------5   

如何找到特定狗的所有父亲母亲和祖父母?

这只给了我父母,但如果有的话,祖父母怎么样?

SELECT Dogs.id, Name, Father_id, Mother_id
FROM Dogs, Litter
WHERE Dogs.litter_id = litter.litter_id AND dogs.id = 6;

所以,如果我搜索比利,我应该得到玛丽亚和约翰,然后是约翰的父母菲多和弗雷达。

我很感激一些帮助

1 个答案:

答案 0 :(得分:0)

假设您正在使用SQL Server,以下情况应该有效。

create table Dogs (ID int, Litter_ID int, Name varchar(10));
create table Litter (Litter_ID int, Father_ID int, Mother_ID int);

insert into Dogs values (1, null, 'Fido')
insert into Dogs values (2, null, 'Freda')
insert into Dogs values (3, 11, 'Pedro')
insert into Dogs values (4, 11, 'John')
insert into Dogs values (5, 22, 'Maria')
insert into Dogs values (6, 33, 'Billy')

insert into Litter values (11, 1, 2)
insert into Litter values (33, 4, 5)

SELECT
    Parents.Name AS Parent,
    GrandParents.Name AS GrandParent
FROM Dogs
inner join Litter on Dogs.Litter_ID = Litter.Litter_ID
inner join Dogs Parents on Parents.ID = Litter.Father_ID or Parents.ID = Litter.Mother_ID
left join Litter ParentsLitter on ParentsLitter.Litter_ID = Parents.Litter_ID
left join Dogs GrandParents on GrandParents.ID = ParentsLitter.Father_ID or GrandParents.ID = ParentsLitter.Mother_ID
WHERE dogs.id = 6;
相关问题