繁体   English   中英

获取特定个体的所有孩子(基于树的等级)

Getting all the children of a specific individual (tree-based hierachy)

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我目前正在尝试获取树的任何特定位置的所有关系和子项。 这些表如下:

TABLE ORGANISATION                      TABLE LINKS
| Orga_Name | Code  | DELETED |         | Code  | Dads_Code |  STT  |
| DR        | DR001 |  FALSE  |(root)   | DR001 |   Null    |   OK  |(root no dad snif)
| DSI       | DS001 |  FALSE  |         | DS001 |   DR001   |   OK  |
| DLE       | DL001 |  FALSE  |         | DL001 |   DR001   |   OK  |
| DMP       | DM001 |  FALSE  |         | DM001 |   DS001   |   OK  |
| TRS       | TR001 |  FALSE  |         | TR001 |   DM001   |   OK  |
| TRE       | TE001 |  TRUE   |         | TE001 |   DM001   |   NOK |
| TRC       | TC001 |  FALSE  |         | TE001 |   DM001   |   NOK |

如果任何行具有DELETED = TRUE或STT = NOK,则根本不应该考虑它。 (就像本示例中的TRE和TRC一样)

完美的结果如下所示:

|  Code  |   PICK-ONE|  Path                     |
|  DS001 |   DR001   |  DS001/DR001              |
|  DL001 |   DR001   |  DL001/DR001              |
|  DM001 |   DR001   |  DM001/DS001/DR001        |
|  TR001 |   DR001   |  TR001/DM001/DS001/DR001  |
|  DM001 |   DS001   |  DM001/DS001              |
|  TR001 |   DS001   |  TR001/DM001/DS001        |
|  TR001 |   DM001   |  DM001/TR001              |

因此,我可以在“ PICK-ONE”中选择一个代码,并将其所有(直接和间接)子代作为列表。 我一直在尝试使用CONNECT_BY_ROOT,这是我正在使用的当前代码:

    SELECT  Code, 
            CONNECT_BY_ROOT Code,
            LEVEL-1, 
            SYS_CONNECT_BY_PATH(Code, '/') "Path"--,STT

    FROM    (
            SELECT o1.*,a1.STT,o1.DELETED
            FROM ORGANISATION o1
            LEFT JOIN LINKS a1
            ON o1.Code=a1.Code
            AND DELETED = 'FALSE'
            )
    WHERE LEVEL > 0 AND STT like 'OK' 
    CONNECT BY PRIOR Code = Dads_Code;

我得到的结果大多来自他的根源,以及他的一个孩子(一直是相同的)。 在我的示例中,我得到的结果将来自DS001和DR001。 一些结果是正确的。 可悲的是,分析停止在2级最大值处 ,有一些重复项 ,也有一些通往自身结果的路径 (0级)。

我一直在尝试更改级别或路径,或更改某些条件,但找不到问题。 如果您能帮助我,我将非常高兴!

1 个回复

不要使用CONNECT BY因为它在这一点上已经过时了。 在没有任何标准的日子,这是查询层次结构的好方法。

使用大多数数据库中可用的递归公用表表达式(aka递归CTE)作为SQL标准的一部分。

例如,如果要检索DR001所有子级,则可以执行以下操作:

with n (code, dads_code, lvl, path) as (
  select code, dads_code, 1, code from links where code = 'DR001'
  union all
  select l.code, l.dads_code, n.lvl + 1, n.path || '/' || l.code
    from links l
    join n on n.code = l.dads_code
    where l.stt <> 'NOK'
      and not exists (select 1 from organisation o 
                      where o.code = l.code and deleted = 'TRUE')
)
select code, dads_code, lvl, path from n
2 使用OWLAPi和JFact推理器获取特定类的所有个体

有没有办法让使用推理器的特定班级的所有人? 推理因为我想获得该类的所有推断和认定的个体。 我正在使用JFact推理器,我正在尝试循环和if语句。 我想找到班级的人,例如“人”。 但我无法看到这些人。 有关下面的代码的任何想法或有任何方法为此目的? 谢谢 ...

4 递归地获取树的所有父母和孩子

我有一个MySQL表格 我希望以递归方式在我的视图中得到上述。 期望的输出 我希望将MySQL表格作为上面定义的结构 我的get方法是 通过上述方法,我将父母视为 输出为 学生管理 员工管理 请帮助我如何递归地获得上述结构。 ...

7 获取所有没有特定孩子的父母并对其进行排序

我在编写以下查询时遇到麻烦。 我有一个Parent.class和Child.class 。 每个父母可以有很多孩子,每个孩子可以有很多父母,因此这是双向的多对多关联。 我需要让所有没有具体孩子的父母,并按某些属性对他们进行排序。 parent.age 。 在该问题中大多数赞成的 ...

9 如何获取SelectedItem的所有孩子

在我的程序中,我想获得父节点的所有子节点,以便我可以向它添加新节点。 过去我使用过这种方法: 现在我希望GetAllChildren基于我的SelectedItem属性,它完全正常运行。 是否可以使用GetAllChildren方法执行此操作? 如果是这样,怎么样? 增加1: ...

10 SQL 获取所有孩子

所以我有按部门组织的分层数据,每个部门都有一个父部门,除了最上面的部门。 我现在想写一个 SELECT 语句,以累积的方式选择这个层次结构。 这意味着对于层次结构中的每个级别,我都希望查看作为其子项的所有条目。 例如,如果我有以下表格:部门 雇员 我想得到类似以下的结果: 我环顾四周, ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM