-- 使用 START WITH 和 CONNECT BY 进行层次查询的示例
-- 假设有一个表 emp,包含员工信息和他们的上级领导关系
CREATE TABLE emp (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50),
manager_id INT
);
-- 插入一些示例数据
INSERT INTO emp (emp_id, emp_name, manager_id) VALUES
(1, 'Alice', NULL), -- Alice 是 CEO,没有上级
(2, 'Bob', 1), -- Bob 的上级是 Alice
(3, 'Charlie', 1), -- Charlie 的上级是 Alice
(4, 'David', 2), -- David 的上级是 Bob
(5, 'Eve', 2); -- Eve 的上级是 Bob
-- 使用 START WITH 和 CONNECT BY 查询整个组织结构
SELECT emp_name, LEVEL
FROM emp
START WITH manager_id IS NULL -- 从没有上级的员工(即 CEO)开始
CONNECT BY PRIOR emp_id = manager_id -- 根据上下级关系进行递归查询
ORDER SIBLINGS BY emp_id; -- 按照插入顺序排序
-- 解释:
-- 1. START WITH 子句指定了查询的起始点,这里是没有任何上级的员工(CEO)。
-- 2. CONNECT BY 子句定义了递归关系,这里是指定当前行的 emp_id 应该等于下一行的 manager_id。
-- 3. LEVEL 是一个伪列,表示当前行在层次结构中的级别(深度)。
-- 4. ORDER SIBLINGS BY 用于保持同一级别的记录按照指定的顺序排列。
下一篇:mysql leftjoin
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站