sql如何不使用withas语句查询当前部门的所有子部门
时间: 2023-02-14 18:23:50 浏览: 81
可以使用递归查询来实现。具体的语句如下:
```
WITH RECURSIVE sub_depts(id, name, parent_id) AS (
SELECT id, name, parent_id FROM departments WHERE id = [当前部门ID]
UNION ALL
SELECT d.id, d.name, d.parent_id FROM sub_depts AS sd, departments AS d
WHERE sd.id = d.parent_id
)
SELECT * FROM sub_depts;
```
其中递归查询的部分使用了WITH语句,但是查询结果并不使用WITH语句。
注意:递归查询最好不要在大数据下使用,会给数据库带来较大压力。
相关问题
SQL语句递归查询当前部门下的所有子部门以及当前部门
的员工信息,该怎么写?
您可以使用 WITH RECURSIVE 关键字来实现 SQL 语句递归查询当前部门下的所有子部门以及当前部门的员工信息。以下是一个示例 SQL 语句:
WITH RECURSIVE sub_dept(id, name, parent_id) AS (
SELECT id, name, parent_id
FROM departments
WHERE id = :dept_id
UNION ALL
SELECT d.id, d.name, d.parent_id
FROM departments d
JOIN sub_dept sd ON d.parent_id = sd.id
), sub_emp(id, name, dept_id) AS (
SELECT id, name, dept_id
FROM employees
WHERE dept_id = :dept_id
UNION ALL
SELECT e.id, e.name, e.dept_id
FROM employees e
JOIN sub_emp se ON e.dept_id = se.id
)
SELECT *
FROM sub_dept sd
LEFT JOIN sub_emp se ON sd.id = se.dept_id;
请注意,:dept_id 是一个占位符,您需要将其替换为实际的部门 ID。此外,您需要根据您的数据库架构和表结构进行适当的修改。
mysql 查询一个部门包括当前部门的子级部门
在 MySQL 中,可以使用递归查询来查询一个部门包括当前部门的子级部门。
举个例子,假设你有一个名为 "departments" 的表,其中有 "id" 和 "name" 两列,并且有 "parent_id" 列表示父部门的 ID。你可以使用下面的 SQL 语句来查询 id 为 5 的部门及其子级部门:
```
WITH RECURSIVE cte (id, name, parent_id) AS (
SELECT id, name, parent_id FROM departments WHERE id = 5
UNION ALL
SELECT d.id, d.name, d.parent_id FROM departments d
JOIN cte ON d.parent_id = cte.id
)
SELECT * FROM cte;
```
这个语句中使用了 WITH RECURSIVE 关键字来定义一个递归查询,即 cte 表。在第一个 SELECT 子句中,我们查询了 id 为 5 的部门。在第二个 SELECT 子句中,我们使用了 JOIN 来连接 cte 表和 departments 表,并查询 parent_id 等于 cte 表中 id 的部门。这样就能得到所有子级部门的信息。最后一个 SELECT 用来返回 cte 表的结果。
阅读全文