共计 1088 个字符,预计需要花费 3 分钟才能阅读完成。
导语
这次要实现的是一对多查询,使用 MySQL 的 group_concat 函数实现。
group_concat
简单来说,这个函数的作用就是连接多个字段,函数的具体详解可以看这篇文章。
数据表
首先我们先建立两个表
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
— —————————-
— Records of student
— —————————-
INSERT INTO `student` VALUES (‘1’, ‘tom’);
INSERT INTO `student` VALUES (‘2’, ‘jerry’);
CREATE TABLE `course` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`s_id` int(11) NOT NULL,
`c_name` char(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
— —————————-
— Records of course
— —————————-
INSERT INTO `course` VALUES (‘1’, ‘1’, ‘ 语文 ’);
INSERT INTO `course` VALUES (‘2’, ‘1’, ‘ 数学 ’);
INSERT INTO `course` VALUES (‘3’, ‘2’, ‘ 英语 ’);
INSERT INTO `course` VALUES (‘4’, ‘2’, ‘ 体育 ’);
INSERT INTO `course` VALUES (‘5’, ‘2’, ‘ 美术 ’);
实例
如果我们用平时使用的 SQL 查询
SELECT s.`name`,c.`c_name` FROM student AS s LEFT JOIN course AS c ON c.s_id = s.id;
查询出的结果是下面用 group_concat 函数查询
SELECT s.`name`,(SELECT group_concat(course.c_name) FROM course WHERE course.s_id = s.id) FROM student AS s;
此时查询的结果
参考资料:MySQL 的 GROUP_CONCAT 函数详解、MySQL 一对多查询。