vlambda博客
学习文章列表

MySql关键字GROUP_CONCAT,组合连接查询

试着想一下如果有这样一个需求应该怎么去做: 有一张学生表,和一张分数表。要查出每个学生姓名和分数,分数以逗号隔开 eg:张三   80,90,100

这个需求很简单,有很多种办法来解决,最简单的是我们可以先查询学生,然后再去查询分数,最后由程序代码组装。

学生表(stu)

id name
1 张三
2 李四
3 王五

分数表(course)

id name stu_id score
1 语文 1 80
2 数学 1 90
3 英语 1 75
4 语文 2 55
5 数学 2 45
6 英语 3 90

但是前段时间朋友推荐了一个MySql关键字group_concat,使用这个关键字就很简单了。

SELECT
 s.name name,
 GROUP_CONCAT(c.score) score
FROM
stu s 
LEFT JOIN course c ON s.id = c.stu_id
GROUP BY s.id
在这里插入图片描述

如果我们要查询科目名、分数,并且以分号分割应该怎么写呢?

SELECT
 s.name name,
 GROUP_CONCAT(c.name, ':',c.score  separator '; ') score
FROM
stu s 
LEFT JOIN course c ON s.id = c.stu_id
GROUP BY s.id
在这里插入图片描述

在group_concat里面的字段,不能有为null,不然就会整体为null