`
xinyangwjb
  • 浏览: 81802 次
  • 性别: Icon_minigender_1
  • 来自: 信阳
社区版块
存档分类
最新评论

start with connect by level 实现树

 
阅读更多
具体的sql为
select level treelevel,
       eva.state,
       t.id,
       case
         when t.parentid is null then
          ''
         else
          t.parentid || ''
       end parentid,
       t.summary,
       t.score,
       t.content,
       t.standardscore,
       t.selfAssessmentScore,
       t.remark,
       t.scoreReason,
       t.ruleType,
       case
         when (select count(1) from abc dt where dt.parentid = t.id) = 0 then
          '1'
         else
          '0'
       end leaf,
       case
         when level = 3 then
          '0'
         else
          '1'
       end expanded
  from abc t, def eva
where t.defid = eva.id
   and t.defid = #value#
start with t.id in (select id
                       from abc d
                      where d.parentid is null
                        and d.defid = #value#)
connect by t.parentid = prior t.id ORDER SIBLINGS BY t.seq
****************************************************************
这段sql实现的是一个树形表,使用start with connect by prior level来实现,这个树有两张表:abc和def,abc是def的子表(abc.defid = def.id)。def存的是这个树叫什么名字,是哪个单位,哪个月份的树,abc存的是这个树具体的细则。
leaf和expanded映射成javaBean后是两个boolean类型的值,用来判断图标。
因此,排除def的干扰后,由abc的递归查询来实现这颗树:
start with t.id in (select id
                       from abc d
                      where d.parentid is null
                        and d.defid = #value#)
connect by t.parentid = prior t.id ORDER SIBLINGS BY t.seq


首先确定递归查询的范围:select id
                       from abc d
                      where d.parentid is null
                        and d.defid = #value#
defid=#value#
这棵树的所有顶层节点(因为这颗树只有两层)

递归查询的下次的parentid是上次的id,根据seq字段进行兄弟姐妹排序(ORDER SIBLINGS BY)

由connect by生成的系统默认字段level来生成expanded字段的值
分享到:
评论

相关推荐

    oracle connect by level 应用

    通常,`CONNECT BY`与`START WITH`一起使用,`START WITH`指定了层级遍历的起始节点。 例如,假设我们有一个员工表(EMPLOYEE),其中包含上级员工ID(MANAGER_ID)字段,我们可以使用以下查询来展示员工的管理层次...

    Oracle start with.connect by prior子句实现递归查询

    ### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...

    ORACLE查询树型关系(connect_by_prior_start_with)

    使用 START WITH 和 CONNECT BY 子句可以实现 SQL 的层次查询,并且可以使用 SYS_CONNECT_BY_PATH 函数和 CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE 等伪列函数来增强层次查询的能力。

    connect by的使用探索

    Connect By是一种递归查询语句,用于实现树形结构的查询和遍历。它是 Oracle 数据库中的一种特色语句,能够高效地查询树形结构的数据。 Connect By的基本语法 Connect By语句的基本语法如下: ```sql SELECT [/*+ ...

    oracle数据库startwith用法

    除了 `START WITH` 和 `CONNECT BY` 之外,还有一个关键字 `LEVEL` 也非常有用。`LEVEL` 可以用来标识每一级节点的位置。例如,根节点的层级为1,其子节点的层级为2,以此类推。 假设我们要查询从 `ID = 1` 开始的...

    connect by prior数据库树的应用

    ### Connect By Prior 数据库树的应用 #### 概述 在关系型数据库中,尤其是在 Oracle 数据库环境下,构建和查询层次结构数据是一项常见的需求。通过使用 `Connect By Prior` 存储过程,我们可以有效地处理这类问题...

    树状数据库表:Oracle中start with...connect by prior子句用法

    本文将详细讲解如何利用`START WITH...CONNECT BY PRIOR`子句来构建和查询树形数据库表。 `START WITH...CONNECT BY PRIOR`是Oracle SQL中的一个特性,用于处理具有层级关系的数据。这个子句允许我们遍历和查询具有...

    start connect by

    在SQL查询中,`START WITH` 和 `CONNECT BY` 是两个关键的子句,它们用于构建层次结构查询,通常在处理具有上下级关系的数据时非常有用,如员工与经理的关系、组织结构或者产品分类等。这两个子句是Oracle数据库特有...

    Oracle的Connect By使用示例

    Oracle数据库通过提供`START WITH...CONNECT BY`语句来简化这类查询操作。此功能最早出现在Oracle 8.1.6版本,并一直沿用至今,成为处理递归查询的强大工具之一。 #### 二、Connect By与Start With详解 1. **...

    connect by的使用

    - 可以使用`WHERE`子句在查询中添加额外的过滤条件,但要注意,`WHERE`子句应在`START WITH`之后,`CONNECT BY`之前,否则可能无法正确处理层级关系。 5. **使用示例** 假设我们有一个部门表`DEPARTMENTS`,包含`...

    connect_by_prior_递归算法

    ### Oracle中的Connect By Prior递归算法详解 ...通过正确地设置`START WITH`、`CONNECT BY`和`WHERE`子句,可以有效地查询和分析复杂的数据结构。理解其工作原理有助于更好地利用Oracle的功能来满足各种业务需求。

    Oracle递归树形结构查询功能

    递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的层级查询,以展示数据的层次关系。 在Oracle中,树形结构查询的基本语法如下: ```sql SELECT [LEVEL], * FROM table_name START ...

    浅谈Oracle下connect by原理.pdf

    文章中给出了一个名为`t_test_connectby`的数据表例子,其中包含父子关系的节点数据。通过该表,我们可以更直观地了解Connect By的执行过程。 - 不指定起始条件时,使用`CONNECT BY`: ```sql SELECT * FROM t_test...

    oracle中connect-by-prior用法,实战解决日期分解问题.docx

    Oracle数据库中的`CONNECT BY PRIOR`是一个强大的查询构造器,用于处理树形数据结构,尤其在组织层级、部门结构或者员工管理系统中非常常见。这个功能允许我们从一个或多个根节点开始,按照指定的规则遍历整个树结构...

    【原创】oracle树形结构查询,层次查询,hierarical retrival

    1. 树形结构查询的基本概念:树形结构查询是获取树形结构数据的方法,通过start with和connect by子句来实现。 2. 层次关系的概念:树形结构数据具有层次关系,通过level关键字来确定层次关系。 3. start with子句的...

    将 CONNECT BY 移植到 DB2

    Oracle 使用 `CONNECT BY` 子句以及 `LEVEL`, `PRIOR`, `CONNECT_BY_ROOT` 等伪列来实现递归查询。相比之下,DB2 使用递归 CTE 和 `UNION ALL` 来实现相同的功能。 #### 动机 在将应用从 Oracle 迁移到 DB2 的过程...

    Oracle查询树形结构

    在 Oracle 中,查询树形结构可以使用 START WITH...CONNECT BY PRIOR 子句实现递归查询。其基本语法是: SELECT * FROM tablename START WITH cond1 CONNECT BY cond2 WHERE cond3; 其中,COND1 是根结点的限定...

    【Oracle】树状结构查询

    `START WITH`用于指定查询的起始节点,而`CONNECT BY PRIOR`则定义了节点之间的关系,从而实现对树状结构的遍历。 #### 示例:以KING为根节点的员工树 ```sql SELECT * FROM empa START WITH a.empno = 7839 ...

    oracle中connect-by-prior用法,实战解决日期分解问题.pdf

    `LEVEL`伪列是`connect by prior`查询中的一个重要部分,它可以记录当前行在树结构中的深度,根节点的`LEVEL`始终为1,子节点的`LEVEL`递增。 此外,`WHERE`子句可以用来剪裁树结构,比如移除不满足特定条件的节点...

    Oracle 实战SQL层次查询

    可以通过交换`CONNECT BY PRIOR`中的条件来实现从下向上遍历: ```sql SELECT LEVEL, LPAD(' ', 2 * LEVEL - 1) || ename AS "Ename", job FROM emp START WITH ename = 'SCOTT' CONNECT BY PRIOR mgr = empno; ``` ...

Global site tag (gtag.js) - Google Analytics