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 ...
随机推荐
- 0908CSP-S模拟测试赛后总结
我早就料到昨天会考两场2333 话说老师终于给模拟赛改名了啊. 距离NOIP祭日还有60天hhh. 以上是废话. %%%DeepinC无敌神 -rank1 zkt神.kx神.动动神 -rank2 有钱 ...
- (组合数学)不定方程的解+猜测——cf997B
首先要求出三种等价情况 5×1+1×50=1×5+5×105×1+1×50=1×5+5×10 9×5=5×1+4×10 8×5+1×50=9×10 那么可以求出三种关于x5,x10的不可行条件 x ...
- python的基本数据类型与字符串的操作
一.基本数据类型 (int, bool, str ) int: 整数 str:字符串,一般不存放大量的数据 bool:布尔值,用来判断.True ,Flase list:列表,用来存放大量的数据. [ ...
- python的起源及基本语句
一.Python的起源 Python是吉多范罗苏姆于1989年的圣诞节期间在阿姆斯特丹进行编写的,于1991年编写完成,Python是一门解释型弱类型的编程语言. Python在多个领域中都有应用,比 ...
- Quartz 定时任务配置(spring中)
<!-- Quartz --> <bean name="task" class="com.geostar.geosmarter.nodemanag ...
- Day 6:集合(set)
集合(set)定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key特性:集合里面数据类型是不可变的1.可变的数据类型:列表,字典2.不可变的数据类型:数字.元组.字符串 ...
- Object 和Throwable
Object java.lang.Object 所有类的超类 Object里面有的方法所有的类都有 Object方法: String toString() 返回对象的字符串表现形式 类名 + @ + ...
- UBOOT命令简写说明
所以命令都可以简写,只要命令前面的一部分不会跟其它命令相同,就可以不用写全整个命令. save 命令 CRANE2410 # sa Saving Environment to Flash... Un- ...
- 小米手机 DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs
手机:小米2s,MIUI 9 7.11.16 开发版 手机已处于开发者模式,启用了USB调试,已使用USB线连接了手机,在Android Studio 工具栏点击 "Run ‘app’(Sh ...
- RMQ问题——ST算法
比赛当中,常会出现RMQ问题,即求区间最大(小)值.我们该怎样解决呢? 主要方法有线段树.ST.树状数组.splay. 例题 题目描述 2008年9月25日21点10分,酒泉卫星发射中心指控大厅里,随 ...