如何编写多对多的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脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何判断一对一对多和多对多的关系

text sql SQL多对多的例子

sql 一对多的查询

我们如何在 Keras 中定义一对一、一对多、多对一和多对多的 LSTM 神经网络? [复制]

EF Core中通过Fluent API配置多对多关系

EF Core中通过Fluent API配置多对多关系