递归查询是可以进行递归计算的SQL查询。换句话说,它可以使用自身的结果继续查询。以下是一个抽象描述:
1/ ancestor (x, y) = parent (x, y)
2/ ancestor (x, y) = parent (x, z) && ancestor (Z, Y).
可以简单地理解,列出z的所有祖先,列出z的所有父代,然后列出这些父代的所有父代…
例如,如果您有一个包含两列父列和子列的族表,则如下所示:
pkey char 1 not null primary key
ckey char 1 not null primary key
('A','B')
('A','C')
('A','D')
('C','E')
('D','A')
('D','E')
('D','F')
('F','G')
左手边是父母,右手边是孩子。现在要查找的所有描述,下面是一些代码:
with parent_ctl (ckey) as
(
select ckey
from parents
where pkey='A'
UNION ALL
select c.ckey
from parents C, parent_ctl P
where P.ckey = C.Pkey
)
select ckey from parent_ctl;