递归查询行到单列?

时间:2010-11-29 08:42:48

标签: sql recursion db2 ibm-midrange

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。

1 个答案:

答案 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;