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
posted on 2020-08-07 13:51  一贯可乐  阅读(1413)  评论(0编辑  收藏  举报



123