mysql判断list部门集合是否有子孙部门
时间: 2024-03-09 13:45:06 浏览: 21
可以通过循环查询每个部门的所有后代部门,来判断该list部门集合是否有子孙部门。具体实现可以使用 MySQL 的递归查询功能结合 IN 子句来完成。以下是示例代码:
```
WITH RECURSIVE sub_dept(id) AS (
SELECT id FROM departments WHERE id IN ([部门id列表])
UNION ALL
SELECT d.id FROM departments d JOIN sub_dept sd ON d.parent_id = sd.id
)
SELECT COUNT(*) - COUNT(DISTINCT sub_dept.id) AS sub_dept_count FROM sub_dept;
```
该查询语句会先查询出指定部门列表的id,然后通过递归查询,将这些部门的所有后代部门的id都查询出来,并计算数量。最后返回数量减去去重后的部门id数量,即为这些部门的子孙部门数量。若结果为0,则表示这些部门没有子孙部门。
相关问题
mysql判断list部门集合中的每个部门是否有子孙部门
可以通过循环查询每个部门的所有后代部门,来判断list部门集合中的每个部门是否有子孙部门。具体实现可以使用 MySQL 的递归查询功能结合循环语句来完成。以下是示例代码:
```
SET @dept_list = '[部门id列表]';
SET @dept_count = LENGTH(@dept_list) - LENGTH(REPLACE(@dept_list, ',', '')) + 1;
SET @i = 1;
SET @sub_dept_count = 0;
WHILE (@i <= @dept_count) DO
SET @dept_id = SUBSTRING_INDEX(SUBSTRING_INDEX(@dept_list, ',', @i), ',', -1);
WITH RECURSIVE sub_dept(id) AS (
SELECT id FROM departments WHERE id = @dept_id
UNION ALL
SELECT d.id FROM departments d JOIN sub_dept sd ON d.parent_id = sd.id
)
SELECT COUNT(*) - 1 INTO @count FROM sub_dept;
SET @sub_dept_count = @sub_dept_count + @count;
SET @i = @i + 1;
END WHILE;
SELECT @sub_dept_count;
```
该代码首先定义了一个部门id列表变量 @dept_list,以及列表中部门数量变量 @dept_count。然后使用循环语句,对每个部门id进行查询,计算其所有子孙部门数量,并将结果累加到变量 @sub_dept_count 中。最后返回 @sub_dept_count,即为这些部门的子孙部门数量。若结果为0,则表示这些部门都没有子孙部门。
mysql判断该部门是否有子孙部门
可以通过查询该部门的所有后代部门数量,来判断该部门是否有子孙部门。可以使用 MySQL 的递归查询功能来实现。以下是示例代码:
```
WITH RECURSIVE sub_dept(id) AS (
SELECT id FROM departments WHERE id = [要查询的部门id]
UNION ALL
SELECT d.id FROM departments d JOIN sub_dept sd ON d.parent_id = sd.id
)
SELECT COUNT(*) - 1 AS sub_dept_count FROM sub_dept;
```
该查询语句会先查询出指定部门的id,然后通过递归查询,将该部门的所有后代部门的id都查询出来,并计算数量。最后返回数量减1,即为该部门的子孙部门数量。若结果为0,则表示该部门没有子孙部门。