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 ...
随机推荐
- Linux课程---16、apache虚拟主机设置(如何在一台服务器上配置三个域名)
Linux课程---16.apache虚拟主机设置(如何在一台服务器上配置三个域名) 一.总结 一句话总结:有三个网站www.lampym.com,bbs.lampym.com,mysql.lampy ...
- socket2里面,有些函数带WSA开头,有些不带。请问有何区别?
WSASocket可以使用WinSock特有功能,比如重叠IO,用dwflags指定. WSA的A是指api,用于区别spi,因为在spi中还有wspsocket,wspaccept等... 在 ...
- (2)python tkinter-按钮.标签.文本框、输入框
按钮 无功能按钮 Button的text属性显示按钮上的文本 tkinter.Button(form, text='hello button').pack() 无论怎么变幻窗体大小,永远都在窗体的最上 ...
- 【题解】P1440 均分纸牌
均分纸牌 题目描述: 有\(N\)堆纸牌,编号分别为\(1,2,-,N\).每堆上有若干张,但纸牌总数必为\(N\)的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为\(1\)堆上取 ...
- PyCharm中批量查找及替换
选中需要操作的字符 Ctrl + R 替换 Ctrl + Shift + F 全局查找 Ctrl + Shift + R 全局替换 源自: PyCharm中批量查找及替换 - Ella_Wu - 博客 ...
- PHP面向对象魔术方法之__call函数
l 基本介绍: (1) 当我们调了一个不可以访问的成员方法时,__call魔术方法就会被调用. (2) 不可以访问的成员方法的是指(1. 该成员方法不存在, 2. 成员方法是protected或者 p ...
- 20.multi_case04
import aiohttp import asyncio import ssl async def fetch(session, url): async with session.get(url,s ...
- 华为-eNSP模拟器路由器无法正常启动一直显示“#”
问题项如截图: 解决方案: 1. 打开自己电脑的控制面板 -->> 系统和安全 -->> Windows Defender防火墙 (运行应用通过Windows防火墙) 2 .找 ...
- sql 根据列名查所属表名
比如 有一个jueseID字段,想知道这个字段是哪个表里的. 第一步: select * from syscolumns where name = 'jueseID' 第二步: select * fr ...
- spring:ApplicationContext的三个实现类
* ApplicationContest的三个常用实现类* ClassPathXmlApplicationContext:它可以加载类路径的配置文件,要求配置文件必须在类路径下,如果不在则加载不了* ...