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