1
2
3
4
5
6
7
8
9
10
11
12
select c.id,
c."name" course_name, array_agg(ti.name) teachers, c.course_hours, c.spring_term, c.target_major, c.target_grade,
cs.id schedule_id, cs.start_week, cs.end_week, cs.time, cs.academic_term, cs.place, cs.ratio
from course c
left join (teacher_course tc inner join teacher_info ti
on tc.teacher = ti.id and tc.course = '1') on tc.course = c.id
inner join course_schedule cs on c.id = cs.course
where c.id = '1'
group by (
c.id, c."name", c.course_hours, c.spring_term, c.target_major, c.target_grade,
cs.id, cs.start_week, cs.end_week, cs.time, cs.academic_term, cs.place, cs.ratio
)

cs: 课程安排
c:课程
tc:教师-课程关系

因为有多个老师教同一门课,所以打算将teacher.name合成一个数组返回

按照平常的写法,只需要group by cs.id即可,但如果在postgresql中,则会出现column "" must appear in the GROUP BY clause or be used in an aggregate function的错误

和mysql不同,postgresql中需要将前面select的字段都全部写进去(除了聚合后的字段,如这里的array_arr(ti.name) teachers