如何编写多对多的sql脚本
Posted
技术标签:
【中文标题】如何编写多对多的sql脚本【英文标题】:How to write many to many sql script 【发布时间】:2020-08-23 14:00:54 【问题描述】:学生
id | name
类
id | name
student_classes
id | student_id | class_id
结果一定是这样的
id | name | classes
1 | Bob | Class 1, Class 2
2 | Sara | Class 2
3 | Jon | -
【问题讨论】:
请用您正在使用的数据库标记您的问题:mysql、oracle、sqlserver...? 我正在使用mysql 【参考方案1】:这是一个连接和聚合(或相反)。字符串聚合的实际语法因数据库而异,但逻辑是:
select s.*, c.classes
from students s
inner join (
select sc.student_id, string_agg(c.name, ',') classes
from classes c
inner join student_classes sc on sc.class_id = c.id
group by sc.student_id
) c on c.student_id = s.id
如果您的数据库不支持string_agg()
,只需将其替换为等效函数即可(Oracle 有listagg()
,MySQL 有group_concat()
,...)。
【讨论】:
“on 子句”中的未知列“sc.student_id” @karen:我的错。固定。以上是关于如何编写多对多的sql脚本的主要内容,如果未能解决你的问题,请参考以下文章