MYSQL实现列拼接,即同一个字段,多条记录拼接成一条
一、首先,新建三张表
DROP TABLE IF EXISTS `article`;
CREATE TABLE `article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL COMMENT '标题',
`content` text NOT NULL COMMENT '内容',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='文章表'; -- ----------------------------
-- Records of article
-- ----------------------------
INSERT INTO `article` VALUES ('', '标题1', '内容1');
INSERT INTO `article` VALUES ('', '标题2', '内容2');
INSERT INTO `article` VALUES ('', '标题3', '内容3');
INSERT INTO `article` VALUES ('', '标题4', '内容4');
-- ----------------------------
-- Table structure for article_tag
-- ----------------------------
DROP TABLE IF EXISTS `article_tag`;
CREATE TABLE `article_tag` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`article_id` int(10) unsigned NOT NULL COMMENT '文章ID',
`tag_id` int(10) unsigned NOT NULL COMMENT '标签ID',
PRIMARY KEY (`id`),
KEY `idx_tag_id` (`tag_id`) USING BTREE,
KEY `idx_article_id` (`article_id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='文章-标签关联表'; -- ----------------------------
-- Records of article_tag
-- ----------------------------
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
INSERT INTO `article_tag` VALUES ('', '', '');
-- ----------------------------
-- Table structure for tag
-- ----------------------------
DROP TABLE IF EXISTS `tag`;
CREATE TABLE `tag` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tag_name` varchar(255) NOT NULL COMMENT '标签名',
`tag_desc` varchar(255) NOT NULL COMMENT '标签注释',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='标签表'; -- ----------------------------
-- Records of tag
-- ----------------------------
INSERT INTO `tag` VALUES ('', 'tag1', '标签1');
INSERT INTO `tag` VALUES ('', 'tag2', '标签2');
INSERT INTO `tag` VALUES ('', 'tag3', '标签3');
INSERT INTO `tag` VALUES ('', 'tag4', '标签4');
二、接下来查询关联关系
SELECT
t1.*,tag_name,tag_desc
FROM
`article` t1
LEFT JOIN article_tag t2 ON t1.id = t2.article_id
LEFT JOIN tag t3 ON t2.tag_id = t3.id
这是我们正常查询得到的结果,但实际上我们一般是想要把文章id相同的当做同一条记录,至于标签信息,我们也希望把它们合并到一起,在同一个字段展示,如右图所示

三、我们可以通过使用GROUP_CONCAT()函数来得到这种结果
SELECT
t1.*,GROUP_CONCAT(tag_name) tag_name,GROUP_CONCAT(tag_desc) tag_desc
FROM
`article` t1
LEFT JOIN article_tag t2 ON t1.id = t2.article_id
LEFT JOIN tag t3 ON t2.tag_id = t3.id
GROUP BY t1.id
MYSQL实现列拼接,即同一个字段,多条记录拼接成一条的更多相关文章
- MYSQL 单表一对多查询,将多条记录合并成一条记录
一.描述: 在MySQL 5.6环境下,应工作需求:将一个表中多条某个相同字段的其他字段合并(不太会表达,有点绕,直接上图) 想要达到的效果: 实现SQL语句: SELECT a.books, GRO ...
- SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列
表中有这样的记录,简单的主子表,现要想通过left join 语句把两表关联起来 select * from tbl_diary_reback a left join tbl_diary_reback ...
- Oracle 字段拆分替换在合并成一条
看了网上很多Oracle字段拆分的实例,但是都未能完全满足要求,或许是我水平不够未能很好的理解,如果有大神懂得并且愿意告知我的,可以私信我,在这里真诚的感谢! 1. 首先建立表并插入测试数据 drop ...
- 在SQL SERVER中根据某字段分隔符将记录分成多条记录
XT_RSGL_KQSZ_LS表结构如下图: CREATE TABLE XT_RSGL_KQSZ_LS( KQFW VARCHAR(400) ) 其中KQFW字段以分割符 , 隔开 INSERT I ...
- paip.解决 数据库mysql增加列 字段很慢添加字段很慢
paip.解决 数据库mysql增加列 字段很慢添加字段很慢 #环境如下: mysql5.6 数据仅仅3w alter table xxx add column yyy int default ...
- mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)字符串拼接cancat实战例子
mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)mysql字符串拼接cancat实战例子: mysql update set 多个字段相加,如果是数字相加可以直接用+号(注:hund ...
- MySQL select * 和把所有的字段都列出来,哪个效率更高?
MySQL select * 和把所有的字段都列出来,哪个效率更高 答案是:如何,都不推荐使用 SELECT * FROM (1)SELECT *,需要数据库先 Query Table Metadat ...
- 通过sql的stuff 把一列几行的记录拼接在一行一个字段
---通过sql的stuff 把一列几行的记录拼接在一行一个字段 select FID,a.FCustomerID as 工地ID , 应验收节点 = (stuff((select ',' + isn ...
- mysql查询同一个字段下,不同内容的语句
太久没有用SQL语句都有些忘记了,今天工作中遇到了那就尝试记录一下吧 需求是这样的:想查询同一个字段下,两条指定了不同内容,的其他的值 主要是要想到用where......in 语句如下:select ...
随机推荐
- php curl的正确使用方法
在做一个读取远程抓取数据并显示的demo的时候,遇到了以下几个问题: 1.用的curl变量进行了多定义 2.抓取远程数据时没有返回正确的json数据 没有返回正确的json数据不是因为网站提供的接口问 ...
- shiro框架的组成和内部结构(下一篇为spring整合shiro)
1.shiro简介 Apache Shiro是Java的一个安全框架.功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案. 实际上,Shir ...
- ZJOI 2006 物流运输 bzoj1003
题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...
- fatal error U1087: cannot have : and :: dependents for same target Stop.
转自VC错误:http://www.vcerror.com/?p=72 问题描述: 完成后编译,发现有错误 D:\WinDDK\7600.16385.1\bin\makefile.new(7117) ...
- Java并发编程中的若干核心技术,向高手进阶!
来源:http://www.jianshu.com/p/5f499f8212e7 引言 本文试图从一个更高的视角来总结Java语言中的并发编程内容,希望阅读完本文之后,可以收获一些内容,至少应该知道在 ...
- USACO 2013 January Silver Painting the Fence /// oj23695
题目大意: 输入n,k :n次操作 找到覆盖次数在k及以上的段的总长 一开始位置在0 左右活动范围为1-1000000000 接下来n行描述每次操作的步数和方向 Sample Input 6 22 R ...
- NEERC 1999 Divisibility /// 同余DP oj22640
题目大意: 输入n,m: ( 1 ≤ N ≤ 10000, 2 ≤ M ≤ 100 ) 接下来n个数:Each integer is not greater than 10000 by it's ab ...
- MFC入门--显示静态图片及调用本地软件
MFC是微软开发的基础类库,主要用来开发图形界面应用程序,在学习中,我们要验证算法好坏,一般需要对结果进行可视化. OpenCV是计算机视觉中的开源算法库,集成了很多先进算法,现在想将MFC与Open ...
- /bin /usr/bin /sbin /usr/sbin 目录的作用
/bin是系统的一些指令.bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp.chmod df.dmesg.gzip.kill.ls.mkdir.more.mount.rm.su ...
- selenium学习笔记——driver.get(url) 页面加载时间太长
# 两个同时设置才行 # 实现效果:加载状态停止,进行代码下一步操作 driver.set_page_load_timeout(10) driver.set_script_timeout(10) # ...