查找成员是否是父子关系表中的后代

时间:2017-02-02 22:35:26

标签: sql relational-algebra

我刚刚做了一个我无法解决的练习。在如上所示的表中:

Father|child
a     |b
b     |c
c     |d
d     |e

是否可以编写一个查询,告诉'e'是'a'的后代,还是/和'a'是sql或关系代数中'e'的安慰者?

我的猜测是否定的,因为我必须加入第一个查询,该查询可以检查父/子关系是否为我要调查的每个“父母”级别的新子查询。

1 个答案:

答案 0 :(得分:2)

鉴于

CREATE TABLE FamilyRelation (
    parent int, 
    child int,
    primary key(parent,child)
);

你可以做(​​在postgresql中;这是标准的SQL-99,但是......:)

WITH Recursive Descendants(Parent,Child) AS 
(
    SELECT Parent, Child
    FROM FamilyRelation
  UNION ALL
    SELECT P.Parent, C.Child
    FROM FamilyRelation C JOIN Descendants P ON (P.Child=C.Parent)
)
SELECT * from Descendants
Order by Parent, child

小提琴:http://sqlfiddle.com/#!15/f0e4d/6