Mysql将查询结果集转换为JSON数据 前言学生表学生成绩表查询单个学生各科成绩(转换为对象JSON串并用逗号拼接)将单个学生各科成绩转换为数组JSON串将数组串作为value并设置key两张表联合查询(最终SQL,每个学生各科成绩)最终结果
前言
我们经常会有这样一种需求,一对关联关系表,一对多的关系,使用一条sql语句查询两张表的所有记录,例:一张学生表,一张学生各科成绩表,我们想要用一条SQL查询出每个学生各科成绩;
学生表
1
2
3
4
5
6
7
|
CREATE TABLE IF NOT EXISTS `student`(
`id` INT UNSIGNED AUTO_INCREMENT,
` name ` VARCHAR (100) NOT NULL
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO student( id, name ) VALUES ( 1, '张三' );
INSERT INTO student( id, name ) VALUES ( 2, '李四' );
|
学生成绩表
1
2
3
4
5
6
7
8
9
10
11
|
CREATE TABLE IF NOT EXISTS `score`(
`id` INT UNSIGNED AUTO_INCREMENT,
` name ` VARCHAR (100) NOT NULL
`student_id` INT (100) NOT NULL ,
`score` VARCHAR (100) NOT NULL
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO score( id, name , student_id, score) VALUES ( 1, '数学' , 1, '95.5' );
INSERT INTO score( id, name , student_id, score) VALUES ( 2, '语文' , 1, '99.5' );
INSERT INTO score( id, name , student_id, score) VALUES ( 3, '数学' , 2, '95.5' );
INSERT INTO score( id, name , student_id, score) VALUES ( 4, '语文' , 2, '88' );
|
查询单个学生各科成绩(转换为对象JSON串并用逗号拼接)
1
2
3
4
|
SELECT GROUP_CONCAT(JSON_OBJECT(
'id' ,id, 'name' , name , 'student_id' ,student_id, 'score' , score)) as scores FROM scroe where student_id = 1;
## 查询结果
## { "id" : 1, "name" : "数学" , "student_id" : 1, "score" : "95.5" },{ "id" : 2, "name" : "语文" , "student_id" : 1, "score" : "99.5" }
|
将单个学生各科成绩转换为数组JSON串
1
2
3
4
|
SELECT CONCAT( '[' , GROUP_CONCAT(JSON_OBJECT(
'id' ,id, 'name' , name , 'student_id' ,student_id, 'score' , score)), ']' ) as scores FROM scroe where student_id = 1
## 查询结果
## [{ "id" : 1, "name" : "数学" , "student_id" : 1, "score" : "95.5" },{ "id" : 2, "name" : "语文" , "student_id" : 1, "score" : "99.5" }]
|
将数组串作为value并设置key
1
2
3
4
|
SELECT CONCAT( '{"scoreData":[' , GROUP_CONCAT(JSON_OBJECT(
'id' ,id, 'name' , name , 'student_id' ,student_id, 'score' , score)), ']}' ) as scores FROM scroe where student_id = 1
## 查询结果
## { "scoreData" : [{ "id" : 1, "name" : "数学" , "student_id" : 1, "score" : "95.5" },{ "id" : 2, "name" : "语文" , "student_id" : 1, "score" : "99.5" }]}
|
两张表联合查询(最终SQL,每个学生各科成绩)
1
2
3
4
5
|
SELECT id, name ,
( SELECT CONCAT( '[' , GROUP_CONCAT(JSON_OBJECT(
'id' ,id, 'name' , name , 'student_id' ,student_id, 'score' , score)), ']' ) as scores FROM scroe WHERE student_id = stu.id) AS scores
from student stu
## [{ "id" : 1, "name" : "数学" , "student_id" : 1, "score" : "95.5" },{ "id" : 2, "name" : "语文" , "student_id" : 1, "score" : "99.5" }]
|
最终结果
ID | NAME | SCORES |
---|---|---|
1 | 张三 | [{“id”: 1, “name”: “数学”, “student_id”: 1, “score”: “95.5”},{“id”: 2, “name”: “语文”, “student_id”: 1, “score”: “99.5”}] |
2 | 李四 | [{“id”: 3, “name”: “数学”, “student_id”: 1, “score”: “95.5”},{“id”:4, “name”: “语文”, “student_id”: 1, “score”: “88”}] |
到此这篇关于Mysql将查询结果集转换为JSON数据的文章就介绍到这了,更多相关mysql结果集转换json数据内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_39157014/article/details/113989085