代码之家  ›  专栏  ›  技术社区  ›  Zo Has

将查询行递归到单列?

  •  1
  • Zo Has  · 技术社区  · 14 年前

    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)您能解释一下递归是如何在查询中操作的吗?我在谷歌上搜索了一下,但不知道递归实际上是如何工作的。我的数据库是DB2iSeriesv5r4。

    1 回复  |  直到 14 年前
        1
  •  1
  •   vodkhang    14 年前

    递归查询是可以进行递归计算的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;