一、首先,新建三张表

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实现列拼接,即同一个字段,多条记录拼接成一条的更多相关文章

  1. MYSQL 单表一对多查询,将多条记录合并成一条记录

    一.描述: 在MySQL 5.6环境下,应工作需求:将一个表中多条某个相同字段的其他字段合并(不太会表达,有点绕,直接上图) 想要达到的效果: 实现SQL语句: SELECT a.books, GRO ...

  2. SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列

    表中有这样的记录,简单的主子表,现要想通过left join 语句把两表关联起来 select * from tbl_diary_reback a left join tbl_diary_reback ...

  3. Oracle 字段拆分替换在合并成一条

    看了网上很多Oracle字段拆分的实例,但是都未能完全满足要求,或许是我水平不够未能很好的理解,如果有大神懂得并且愿意告知我的,可以私信我,在这里真诚的感谢! 1. 首先建立表并插入测试数据 drop ...

  4. 在SQL SERVER中根据某字段分隔符将记录分成多条记录

    XT_RSGL_KQSZ_LS表结构如下图: CREATE TABLE  XT_RSGL_KQSZ_LS( KQFW VARCHAR(400) ) 其中KQFW字段以分割符 , 隔开 INSERT I ...

  5. paip.解决 数据库mysql增加列 字段很慢添加字段很慢

    paip.解决 数据库mysql增加列 字段很慢添加字段很慢 #环境如下: mysql5.6    数据仅仅3w alter table xxx add column yyy int default ...

  6. mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)字符串拼接cancat实战例子

    mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)mysql字符串拼接cancat实战例子: mysql update set 多个字段相加,如果是数字相加可以直接用+号(注:hund ...

  7. MySQL select * 和把所有的字段都列出来,哪个效率更高?

    MySQL select * 和把所有的字段都列出来,哪个效率更高 答案是:如何,都不推荐使用 SELECT * FROM (1)SELECT *,需要数据库先 Query Table Metadat ...

  8. 通过sql的stuff 把一列几行的记录拼接在一行一个字段

    ---通过sql的stuff 把一列几行的记录拼接在一行一个字段 select FID,a.FCustomerID as 工地ID , 应验收节点 = (stuff((select ',' + isn ...

  9. mysql查询同一个字段下,不同内容的语句

    太久没有用SQL语句都有些忘记了,今天工作中遇到了那就尝试记录一下吧 需求是这样的:想查询同一个字段下,两条指定了不同内容,的其他的值 主要是要想到用where......in 语句如下:select ...

随机推荐

  1. luoguP1890 gcd区间 [st表][gcd]

    题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R],输出a[L]..a[R]的最大公因数. 输入输出格式 输入格式: 第一行两个整数n,m. 第二行n个整数表 ...

  2. RocketMQ在linux下安装部署

    本博客以当前RocketMQ最新版介绍:v4.4.0 环境要求 64位JDK 1.8+; Maven 3.2.x; // 源码编译时需要用到 二进制文件安装 下载二进制文件:http://mirror ...

  3. LUOGU P4253 [SCOI2015]小凸玩密室(树形dp)

    传送门 解题思路 玄学树形\(dp\),题目描述极其混乱...看错了两次题,设首先根据每次必须点完子树里的灯才能点别的,那么点灯情况只有两种,第一种是点到某一个祖先,第二种是点到某一个祖先的兄弟.所以 ...

  4. <jquery>滚动例子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 解决asp.net web api时间datetime自动带上带上的T和毫秒的问题

    今天用asp.net web api写微信小程序的接口时遇到一个问题. 返回的model中的datetime类型的字段自动转换成了“2014-11-08T01:50:06:234”这样的字符串,带上的 ...

  6. Idea 2018.2.5创建springboot项目依赖包没有的错误

  7. nodejs和vuejs的关系

    转自:https://blog.csdn.net/myKurt/article/details/79914078 nodejs类比Java中:JVM 详述: 就前端来说nodejs具有划时代的意义, ...

  8. 串口通信中,QString 、QByteArray 转化需要注意的问题

    在做串口通信的时候,其中犯了一个错误.在此记录一下:QT中串口通信接到收据和发送数据的接口如下: QByteArray QIODevice::readAll()//接受数据 qint64 QIODev ...

  9. Python全栈开发:装饰器实例

    #!/usr/bin/env python # -*- coding;utf-8 -*- """ 1.将outer函数放入内存 2.遇见@ + 函数名,则将该函数转换为装 ...

  10. Android开发 WebView的详解

    前言 WebView 是Android显示html内容的主要方式,当然TextView也可以加载html内容.但是WebView除了功能更加强大,最重要的是还能调用Html里的JavaScript语言 ...