zoukankan      html  css  js  c++  java
  • oracle和postgresql 递归查询父子关系记录语法区别

    oracle:

    一、数据

    db数据字段如下:

    task_id             task_name         t.parent_task_id       ***
    ***                     ***                          ***                               ***
    000001            t1                         ***                                 ***
    000002            t11                       000001                        ***
    000005            t12                       000001                         ***
    000003            t111                    000002                         ***
    000004            t1111                  000003                         ***
    000006            t121                    000005                         ***
    000007            t1211                  000006                         ***
    ***                     ***                       ***                                 ***

    二、格式
            Select * from …. Where [结果过滤条件语句]
      Start with  [and起始条件过滤语句]
      Connect by prior [and中间记录过滤条件语句]
    三、查找所有下级
            select * from tablename start with id=1 connect by prior id=pid
      注意:此sql能查找id=1的数据的所有下级,写sql语句时要注意,因为是从id开始查找下级,所以connect by prior 子句的条件是         id=pid
    四、查找所有上级
           select * from tablename start with id=5 connect by prior pid=id
      因为是从id开始查找上级,所以connect by prior 子句的条件是pid=d

    select t.task_id ,t.task_name ,t.parent_task_id 
    from t_task t 
    start with task_id='000001'
    connect by prior task_id = parent_task_id;

    五、显示结果

    结果显示:

    task_id                 task_name          t.parent_task_id
    000001                t1          
    000002                t11                       000001
    000003                t111                     000002
    000004                t1111                    000003
    000005                t12                       000001
    000006                t121                     000005
    000007                t1211                   000006

    postgresql:

    查询父节点下所有的子节点

    WITH recursive fileinfo
     (pk_fi_id,
      f_fi_parentid)
    AS
    (
    SELECT
            pk_fi_id ,
            f_fi_parentid 
        FROM
            t_fileinfo
        WHERE
            pk_fi_id = '92719f78-22d6-4db1-a484-dff34de76890'
    UNION ALL
    SELECT
                mm.pk_fi_id ,
                mm.f_fi_parentid 
            FROM
                t_fileinfo AS mm
    INNER JOIN fileinfo AS child ON mm.f_fi_parentid = child.pk_fi_id
    )
    SELECT
      *
    FROM fileinfo
  • 相关阅读:
    Shell 数组
    Shell 中的中括号用法总结
    设置Linux可以查看历史命令(history)的执行时间
    jasypt 对 配置文件密码进行加密处理
    今日进度
    今日进度
    今日进度
    今日进度
    今日进度
    每周总结
  • 原文地址:https://www.cnblogs.com/lingbing/p/6092928.html
Copyright © 2011-2022 走看看