mysql 查询部门信息和小组信息,同一个部门会有多个小组,当部门相同的行只有第一行显示部门名称和小组名称,其它行部门名称为空,小组名称不为空
时间: 2023-08-18 14:07:51 浏览: 86
可以使用MySQL中的GROUP BY语句和IF函数来实现该需求,示例如下:
```
SELECT
IF(@dept = dept_name, '', dept_name) AS dept_name,
group_name
FROM
groups
JOIN departments ON groups.dept_id = departments.dept_id
CROSS JOIN (SELECT @dept := '') AS vars
ORDER BY
dept_name, group_name
```
解释如下:
- 使用JOIN将groups表和departments表连接起来,以获取部门名称和小组名称;
- 使用CROSS JOIN初始化一个变量@dept,用于记录前一行的部门名称;
- 使用IF函数判断当前行的部门名称是否与前一行相同,如果相同则部门名称为空,否则为当前行的部门名称;
- 使用ORDER BY按照部门名称和小组名称进行排序。
需要注意的是,由于MySQL在查询时会先执行ORDER BY语句,再执行SELECT语句,因此需要使用CROSS JOIN来先初始化变量,否则变量会在执行ORDER BY语句时被清空。
相关问题
mysql 在一张表中存有部门和小组信息,查询部门信息和小组信息,同一个部门会有多个小组,当部门相同的行只有第一行显示部门名称和小组名称,其它行部门名称为空,小组名称不为空
可以使用MySQL中的GROUP BY语句来实现该需求。
假设表名为group_info,包含字段为dept和group_name,则可以使用如下SQL语句:
```
SELECT IF(@dept=dept,'',dept) AS dept, group_name
FROM group_info
ORDER BY dept, group_name
```
其中,IF函数用于判断当前行的dept是否与前一行相同,如果相同则返回空字符串,否则返回当前行的dept值。@dept是一个用户变量,用于保存前一行的dept值。
最后通过ORDER BY语句按照dept和group_name进行排序,确保同一个部门的行排在一起,并且第一行显示部门名称和小组名称。
阅读全文