如何使用SQL从“父母和孩子”表中返回祖父母及其孙子的列表?

时间:2019-09-10 19:22:11

标签: sql

有一个包含2列的表格,父级和子级。 “父级”列中也列出了一些子级。如何返回祖父母及其子女的名单?

Parent   |   Child
Tom      |   Joe 
Sam      |   Mark
Mark     |   Gil
Joe      |   Sal
Joe      |   Dan

想要的结果:

Grandparent|   Grandchild
Sam        |   Gil
Tom        |   Sal
Tom        |   Dan

我找到了如何获得祖父母的方法。

SELECT Parent as Grandparent
FROM ParentChild
WHERE Child IN (Select Parent from ParentChild)

但是我认为我需要使用联接才能使其正常工作,但是我无法弄清楚。

2 个答案:

答案 0 :(得分:0)

这是一个自我联接:

select tp.parent, tgc.child
from t tp join
     t tgc
     on tp.child = tgc.parent

答案 1 :(得分:0)

SELECT GrandData.Parent as Grandparent, ParentData.GrandChild as Grandchild

From ParentChild as GrandData

Inner JOIN 
(
    SELECT Parent as Parent, Child as GrandChild
    FROM ParentChild
    WHERE Parent IN (Select Child from ParentChild)
) As ParentData

On GrandData.Child=ParentData.Parent

Order by GrandData.Parent

您必须先像内部查询中一样标识父子关系,然后才能为下一代(祖父母)基于父子关系进行内部联接。