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