我刚刚做了一个我无法解决的练习。在如上所示的表中:
Father|child
a |b
b |c
c |d
d |e
是否可以编写一个查询,告诉'e'是'a'的后代,还是/和'a'是sql或关系代数中'e'的安慰者?
我的猜测是否定的,因为我必须加入第一个查询,该查询可以检查父/子关系是否为我要调查的每个“父母”级别的新子查询。
答案 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