mysql mysql多条数据合并数据

33413人阅读
mysql(15)
SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 AND md.user_id=17:
利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行,如|1 | 10,20,20|
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) 。
MySQL中group_concat函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
mysql& select *
+------+------+
| id| name |
+------+------+
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔(默认)&
mysql& select id,group_concat(name)
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,分号分隔&
mysql& select id,group_concat(name separator ';')
+------+----------------------------------+
| id| group_concat(name separator ';') |
+------+----------------------------------+
|1 | 10;20;20 |
|3 | 200;500 |
+------+----------------------------------+
3 rows in set (0.00 sec)
以id分组,把去冗余的name字段的值打印在一行,&
mysql& select id,group_concat(distinct name)
+------+-----------------------------+
| id| group_concat(distinct name) |
+------+-----------------------------+
|1 | 10,20|
|3 | 200,500 |
+------+-----------------------------+
3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序&
mysql& select id,group_concat(name order by name desc)
+------+---------------------------------------+
| id| group_concat(name order by name desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2264720次
积分:20518
积分:20518
排名:第301名
原创:344篇
转载:255篇
评论:256条
(1)(1)(1)(2)(1)(4)(1)(1)(3)(2)(3)(5)(1)(5)(11)(9)(2)(3)(2)(5)(6)(5)(3)(3)(4)(7)(14)(22)(33)(22)(12)(15)(19)(20)(8)(16)(5)(3)(10)(9)(5)(9)(17)(15)(6)(10)(6)(15)(5)(14)(8)(30)(30)(6)(9)(3)(3)(5)(19)(3)(7)(10)(8)(4)(2)(5)(3)(6)(3)(3)(9)(25)千万级别mysql合并表快速去重
mysql合并表去重
现有表a和b,把两个表中的数据合并去重到c表中。其中a和b表中数据量大概在2千万左右。
操作系统版本:CentOS release 5.6 64位
操作系统内存:8G
数据库版本:5.1.56-community 64位
数据库初始化参数:默认
数据库表和数据量
mysql& desc a2
+-------+-------------+------+-----+---------+-------+
Type&&&&&&&
| Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
varchar(20) | YES& | MUL |
varchar(30) | YES&
varchar(12) | YES&
varchar(20) | YES&
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql& desc b2
+-------+-------------+------+-----+---------+-------+
Type&&&&&&&
| Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
varchar(20) | YES&
varchar(30) | YES&
varchar(12) | YES&
varchar(20) | YES&
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
a和b表的数据概况如下
mysql& select * from a2kw limit 10;
+-----------+-----------+------+----------+
+-----------+-----------+------+----------+
+-----------+-----------+------+----------+
10 rows in set (0.01 sec)
1、在B表上创建索引
mysql& select count(*) from b2
+----------+
| count(*) |
+----------+
+----------+
1 row in set (0.00 sec)
mysql& create index ind_b2kw_c1 on& b2kw(c1);
rows affected (1 min
Records: & Duplicates:
0& Warnings: 0
数据量为: ,时间为:1 min 2.94 sec
2、把a、b分别插入中间表temp表中
创建中间表
mysql& create table temp& select
* from c2kw where 1=2;
Query OK, 0 rows affected (0.00 sec)
Records: 0& Duplicates: 0&
Warnings: 0
mysql& insert into temp& select
rows affected (13.23 sec)
Records: & Duplicates:
0& Warnings: 0
mysql& insert into temp& select
rows affected (13.27 sec)
Records: & Duplicates:
0& Warnings: 0
mysql& select count(*)
+----------+
| count(*) |
+----------+
+----------+
1 row in set (0.00 sec)
数据量为: ,时间为:26.50 sec
3、temp建立联合索引,强制索引去掉重复数据
mysql& create index ind_temp_c123 on temp(c1,c2,c3);
rows affected (3 min 43.87 sec)
Records: & Duplicates:
0& Warnings: 0
查看执行计划
mysql& explain select c1,c2,c3,max(c4) from temp
FORCE INDEX (ind_temp_c123) group by c1,c2,c3 ;
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------+
| id | select_type | table | type& |
possible_keys |
key&&&&&&&&&&
| key_len | ref& |
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------+
SIMPLE&&&&&
| temp& | index |
NULL&&&&&&&&&
| ind_temp_c123 |
+----+-------------+-------+-------+---------------+---------------+---------+------+----------+-------+
1 row in set (0.05 sec)
mysql& insert into c2kw select c1,c2,c3,max(c4) from temp FORCE INDEX
(ind_temp_c123) group by c1,c2,c3
rows affected (2 min 0.85 sec)
Records: & Duplicates:
0& Warnings: 0
实际大约花费实际为:6 min
4、删除中间表
Query OK, 0 rows affected (0.99 sec)
实际大约花费实际为:1 sec
5、建立c索引
mysql& create index ind_c2kw_c1 on c2kw(c1);
rows affected (49.74 sec)
Records: & Duplicates:
0& Warnings: 0
mysql& create index ind_c2kw_c2 on c2kw(c2);
rows affected (1 min
47.20 sec)
Records: & Duplicates:
0& Warnings: 0
mysql& create index ind_c2kw_c3 on c2kw(c3);
rows affected (2 min
42.02 sec)
Records: & Duplicates:
0& Warnings: 0
实际大约花费实际为:5分钟
6、清空a、b表
mysql& truncate table a2
Query OK, 0 rows affected (1.15 sec)
mysql& truncate table b2
Query OK, 0 rows affected (1.34 sec)
实际大约花费实际为:3sec
一共花费的时间大概在15分钟左右
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2010年6月 其他数据库开发大版内专家分月排行榜第二2010年6月 Oracle大版内专家分月排行榜第二2010年5月 其他数据库开发大版内专家分月排行榜第二
2011年1月 其他数据库开发大版内专家分月排行榜第三2010年12月 其他数据库开发大版内专家分月排行榜第三
2010年 总版技术专家分年内排行榜第二
2009年 总版技术专家分年内排行榜第三
2014年7月 其他数据库开发大版内专家分月排行榜第二2014年3月 其他数据库开发大版内专家分月排行榜第二2013年7月 其他数据库开发大版内专家分月排行榜第二2013年4月 其他数据库开发大版内专家分月排行榜第二2012年3月 其他数据库开发大版内专家分月排行榜第二2011年8月 其他数据库开发大版内专家分月排行榜第二2011年7月 其他数据库开发大版内专家分月排行榜第二2009年11月 其他数据库开发大版内专家分月排行榜第二2009年7月 其他数据库开发大版内专家分月排行榜第二2009年6月 其他数据库开发大版内专家分月排行榜第二2009年5月 其他数据库开发大版内专家分月排行榜第二2009年4月 其他数据库开发大版内专家分月排行榜第二2009年3月 其他数据库开发大版内专家分月排行榜第二2009年1月 其他数据库开发大版内专家分月排行榜第二2008年10月 其他数据库开发大版内专家分月排行榜第二2008年8月 其他数据库开发大版内专家分月排行榜第二2003年9月 Delphi大版内专家分月排行榜第二
2014年4月 其他数据库开发大版内专家分月排行榜第三2013年10月 其他数据库开发大版内专家分月排行榜第三2013年9月 其他数据库开发大版内专家分月排行榜第三2013年6月 其他数据库开发大版内专家分月排行榜第三2012年12月 其他数据库开发大版内专家分月排行榜第三2012年11月 其他数据库开发大版内专家分月排行榜第三2012年10月 其他数据库开发大版内专家分月排行榜第三2012年9月 其他数据库开发大版内专家分月排行榜第三2012年1月 其他数据库开发大版内专家分月排行榜第三2011年11月 其他数据库开发大版内专家分月排行榜第三2011年9月 其他数据库开发大版内专家分月排行榜第三2011年6月 其他数据库开发大版内专家分月排行榜第三2011年5月 其他数据库开发大版内专家分月排行榜第三2011年4月 其他数据库开发大版内专家分月排行榜第三2011年3月 其他数据库开发大版内专家分月排行榜第三2010年11月 其他数据库开发大版内专家分月排行榜第三2010年4月 其他数据库开发大版内专家分月排行榜第三2010年1月 其他数据库开发大版内专家分月排行榜第三2009年12月 其他数据库开发大版内专家分月排行榜第三2009年2月 其他数据库开发大版内专家分月排行榜第三2008年7月 其他数据库开发大版内专家分月排行榜第三2008年6月 其他数据库开发大版内专家分月排行榜第三2008年1月 其他数据库开发大版内专家分月排行榜第三2007年12月 其他数据库开发大版内专家分月排行榜第三2003年12月 Delphi大版内专家分月排行榜第三2003年10月 Delphi大版内专家分月排行榜第三
2010年 总版技术专家分年内排行榜第二
2009年 总版技术专家分年内排行榜第三
本帖子已过去太久远了,不再提供回复功能。同一mysql数据库.两个表怎么合并在一个里面? 里面有几万条数据.详细请进来看看
同一mysql数据库.两个表怎么合并在一个里面? 里面有几万条数据.详细请进来看看
其中表1里是存的 文章的标题 id& 栏目 点击次数等 
表2里是存放的 文章的 id&&文章的内容
我现在想合并两个表. 表二中的文章内容 插入到表一中对应的id的 后面
就是让标题 id& 栏目 点击次数 内容都在一个表里.
这个sql语句怎么写啊?  试了不少都不成功
各种方法呀,写sql,写个脚本都行,才几万数据
查出来存进去
简单啊 &批量更新两张表而已
update table1 a inner join table2 b on a.id=b.id set a.content=b.content where a.id=b.id;
你知道为什么要设计成两个表吗,就是为了拆分大字段,你
合并就是为了方便查询,你可以新建一个视图,就变一个表了,不要坑好么,到时出了问题,又说别人的程序垃圾。
新建一个表table3,insert into table3 select 字段 from table1 t1 ,table2 t2 where t1.id=t2.id.然后把table3 rename 为你想要的表名

我要回帖

更多关于 mysql数据库合并工具 的文章

 

随机推荐