• 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
  • 相关阅读:
    Python OpenCV 常用操作
    Conda Cheatsheet | 速查表
    Loadrunner解决启动浏览器后页面显示空白
    26个ASP.NET常用性能优化方法
    C# Foreach用法
    体验ASP.NET MVC3 表单令牌功能!
    基于.Net(C#开发)平台的三层框架架构软件的设计与实现
    去掉浏览器中a标签的虚线
    Microsoft Dynamics CRM 4.0 序列号
    编写 Cookie
  • 原文地址:https://www.cnblogs.com/lingbing/p/6092928.html
Copyright © 2020-2023  润新知