select子句子查询多行结果拼接成字符串

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

猜你喜欢

转载自www.cnblogs.com/qds1401744017/p/13401886.html