select 子句中子查询有多行怎么办?
当我们查询一对多的关联表时,可能会遇到这样的问题:
比如有两个表: teacher 和 student
teacher:
id | name | gender |
---|---|---|
1 | 张老师 | 男 |
2 | 李老师 | 女 |
3 | 王老师 | 男 |
student:
id | teacher_id | name |
---|---|---|
1 | 1 | 小红 |
2 | 1 | 小兰 |
3 | 2 | 小绿 |
4 | 2 | 小紫 |
5 | 3 | 小黑 |
如果我们想一条SQL查询所有老师的信息以及每个老师所对应的的学生姓名(效果如下),应该怎么办?
teacher_name | teacher_gender | students |
---|---|---|
张老师 | 男 | 小红,小兰 |
李老师 | 女 | 小绿,小紫 |
王老师 | 男 | 小黑 |
由于select子句中做子查询只允许返回一行数据,所以我们考虑拼接子查询的多行数据(一个老师对应多个学生)
select
teacher.name,
teacher.gender,
(select array_to_string(array(
select
student.name
from
student
where student.teacher_id = teacher.id
),',')) as students
from
teacher