以下是一个示例的递归SQL查询(PostgreSQL)的代码:
首先,我们创建一个表来存储员工的层级关系:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
manager_id INT
);
然后,我们向表中插入一些示例数据:
INSERT INTO employees (name, manager_id)
VALUES ('John', NULL),
('Mike', 1),
('Sarah', 1),
('Tom', 2),
('Emma', 2),
('David', 3);
接下来,我们编写递归查询的函数:
CREATE OR REPLACE FUNCTION get_all_subordinates(employee_id INT)
RETURNS TABLE (id INT, name VARCHAR(100), manager_id INT) AS $$
BEGIN
RETURN QUERY
SELECT id, name, manager_id
FROM employees
WHERE manager_id = employee_id;
FOR sub_employee IN
SELECT id, name, manager_id
FROM employees
WHERE manager_id = employee_id
LOOP
RETURN QUERY
SELECT id, name, manager_id
FROM get_all_subordinates(sub_employee.id);
END LOOP;
END;
$$ LANGUAGE plpgsql;
最后,我们可以调用上述函数来获取给定员工的所有下属:
SELECT *
FROM get_all_subordinates(1);
上述查询将返回给定员工ID为1的所有下属的记录。
请注意,以上是一个简单的示例,实际情况中可能需要根据表结构和业务需求进行适当的调整。
下一篇:编写一个调整函数