【问题标题】:How to write many to many sql script如何编写多对多的sql脚本
【发布时间】:2020-08-23 14:00:54
【问题描述】:

如何编写多对多的sql脚本

学生

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

标签: mysql sql string join group-by


【解决方案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:我的错。固定。
猜你喜欢
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2019-01-28
  • 1970-01-01
相关资源
最近更新 更多