我想在SQL中显示具有子节点和父节点的树结构。 我有一张表:
Employee
-------------
ID (int)
FirstName (varchar)
LastName (varchar)
ParentID (int)
Job (varchar)
代表一名员工。 ParentID 代表员工的经理。我想这个表只有这个结构。
答案 0 :(得分:8)
查询 - 整个树结构:
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;