实现mysql一对多查询
今天做项目,遇到了一个问题。就是两张表,如下的样子,score表记录学生成绩:
users表记录学生的信息:
如果我们按照传统的连表查询的话:
select users.id,name,class_name,score from users LEFT JOIN score on users.id = score.u_id;
执行之后,得到如下的结果:
id name class_name score
1 小明 数学 86
1 小明 语文 85
1 小明 英语 78
2 小李 数学 87
2 小李 英语 75
2 小李 语文 77
2 小李 语文 77
这并不是我需要的结果,我想要的是如下的样子:
那该如何查询呢?通过各种搜索,找到了一种解决的方法,特此记录。
select id,name,math,english,chinese from users left JOIN
(select u_id,max(case class_name when '数学' then `score` else 0 end) math,max(case class_name when '英语' then `score` else 0 end) english,
max(case class_name when '语文' then `score` else 0 end) chinese
from score GROUP BY u_id) scores on users.id = scores.u_id;