1)什么是递归查询? 2)它们危险吗? 3)如何进行递归查询以提供
的结果ID Date
1 10/10/2010
1 20/10/2010
1 20/10/2010
2 11/10/2010
2 22/10/2010
到
ID Dates
1 10/10/2010,20/10/2010,20/10/2010
2 11/10/2010,22/10/2010
4)你能解释一下递归在查询中的运作方式吗?我用谷歌搜索,但无法得到递归实际上如何工作。我的数据库是DB2 ISeries V5R4。
答案 0 :(得分:1)
递归查询是一种可以进行递归计算的SQL查询。换句话说,它可以使用自身的结果继续查询。这是一个抽象的描述:
1/ ancestor (x, y) = parent (x, y)
2/ ancestor (x, y) = parent (x, z) && ancestor (Z, Y).
可以简单地理解你列出Z的所有祖先,列出所有父母,然后是父母的所有父母......
例如,如果您有一个包含2列Parent和Child的Family的表,请执行以下操作:
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')
左侧是父母,右侧是儿童。现在你想要找到A的所有代数,那么这里有一些代码:
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;