【问题标题】:Tree structure in sql in Oracle.How to show tree,child nodes and parent nodes in SQL OracleOracle 中 sql 中的树结构。如何在 SQL Oracle 中显示树、子节点和父节点
【发布时间】:2016-05-10 09:21:20
【问题描述】:

我想在 SQL 中显示一个带有子节点和父节点的树结构。 我有一张像这样的桌子:

Employee
-------------
ID (int)
FirstName (varchar)
LastName (varchar)
ParentID (int)
Job (varchar)

代表员工。 ParentID 代表员工拥有的经理。我希望这张表只有这种结构。

  1. 我想展示整个树结构。
  2. 我只想显示子节点
  3. 我只想显示父节点

SampleDataImage

【问题讨论】:

标签: sql oracle hierarchical-data recursive-query connect-by


【解决方案1】:

查询 - 整个树结构

SELECT *
FROM   Employee
START WITH ParentID IS NULL
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;

查询 - 给定员工的孩子

您不需要对此进行分层查询。
(父级由绑定变量 :parent_id 给出)

SELECT *
FROM   Employee
WHERE  ParentID = :parent_id
ORDER BY LastName, FirstName, ID;

查询 - 给定员工的后代

与整个树的查询相同,但起点不同
(父级由绑定变量 :parent_id 给出)

SELECT *
FROM   Employee
START WITH ParentID = :parent_id
CONNECT BY PRIOR ID = ParentID
ORDER SIBLINGS BY LastName, FirstName, ID;

查询 - 员工及其祖先

与上一个查询类似,但将 CONNECT BY 颠倒了,您不需要订购兄弟姐妹,因为每个员工只有一个直属经理。
(员工由绑定指定变量:employee_id)

SELECT *
FROM   Employee
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;

查询 - 员工的经理

与上一个查询相同,但使用过滤器 LEVEL = 2 仅获取直接父行。
(员工由绑定变量 :employee_id 给出)

SELECT e.*
FROM   Employee e
WHERE  LEVEL = 2
START WITH ID = :employee_id
CONNECT BY PRIOR ParentID = ID;

【讨论】:

    猜你喜欢
    • 2011-10-29
    • 1970-01-01
    • 2013-01-17
    • 2011-09-10
    • 2010-12-12
    • 1970-01-01
    • 2021-05-31
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多