多条sql连接查询
UNION ALL 操作用于结合两个或更多 SELECT 语句的结果集,包括所有匹配的行,甚至包括重复的行。这与 UNION 不同,因为 UNION 会自动删除重复的行。
满足条件:
1、两个select查询的列的数量必须相同。
2、每个列的数据类型需要相似。
汇总显示1234
报表统计1234
内容介绍
如何进行行列转换
如何生成唯一序列号
如何删除重复数据
删除重复数据
查询重复数据
序列号进行行列转换
多列转行SQL语句
列转行SQL语句:
如何处理重复数据
SELECT * FROM (SELECT sum(kills) as '沙僧' FROM user1 a JOIN user_kills b ON a.id=b.user_id and a.user_name='沙僧') a cross JOIN (SELECT sum(kills) as '猪八戒' FROM user1 a JOIN user_kills b ON a.id=b.user_id and a.user_name='猪八戒') b CROSS JOIN (SELECT sum(kills) as '孙悟空' FROM user1 a JOIN user_kills b ON a.id=b.user_id and a.user_name='孙悟空') c
CREATE TABLE `user1` (
`id` int(11) NOT NULL,
`user_name` varchar(3) COLLATE utf8_bin NOT NULL,
`over` varchar(5) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
CREATE TABLE `user2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(3) COLLATE utf8_bin NOT NULL,
`over` varchar(5) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
CREATE TABLE `user_kills` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`timestr` datetime NOT NULL,
`kills` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
利用Group By和having从句来处理判断数据是否重复
利用Group By和having从句处理
删除重复数据,对于相同数据保留ID最大的
mysql中生成唯一序列号方式
使用系统提供的序列化生成方式auto_increment
1)、在开启事务回滚,重新插入后出现空洞(id不连续)
生成唯一序列号
使用扩展的序列表方式进行列转行
使用union方式进行列转行
生成序列表步骤
1)、create table tb_sequence(id int auto_increment not null, primary key(id))
2)、insert into tb_sequence values(),(),(),(),(),(),(),(),(),();
增加\G显示
使用union的方法实现列转行
备注:当连接表变多时,使用序列号进行列转行优于union
需要进行列转行的另一种场景
利用序列表处理列转换行的数据
使用case方法实现行转列
使用自连接的方法实现行转列
随着用户增多,出现的缺点如下:
1)、要修改sql,增加复杂性,
2)、增加join连接次数,
3)、查询效率低
需要进行行转列的场景
需要进行行转列的场景