mysql5.6 排序失效_mysql 使用union(all) + order by 导致排序失效
1、SQL1如下
SELECT
aa.*
FROM
apas_smoke aa
WHERE
STATUS = 0
AND aa.area_id = 'd61523dda339441f80008634c6b91f60'
AND aa.type = '3'
AND to_days( create_time ) = to_days(
now())
ORDER BY
CAST( aa.smoke_number AS UNSIGNED ) ASC
查询结果如下,smoke_number 顺序为3,4
2、sql2如下:
SELECT
bb.*
FROM
apas_smoke bb
WHERE
bb.STATUS = 0
AND bb.area_id = 'd61523dda339441f80008634c6b91f60'
AND bb.type = '1'
AND to_days( create_time ) = to_days(
now())
ORDER BY
CAST( bb.smoke_number AS UNSIGNED ) ASC
查询结果如下,smoke_number顺序为1,2
3、但是当使用UNION后,SQL如下
( SELECT
aa.*
FROM
apas_smoke aa
WHERE
STATUS = 0
AND aa.area_id = 'd61523dda339441f80008634c6b91f60'
AND aa.type = '3'
AND to_days( create_time ) = to_days(
now())
ORDER BY
CAST( aa.smoke_number AS UNSIGNED ) ASC
) UNION
(
SELECT
bb.*
FROM
apas_smoke bb
WHERE
bb.STATUS = 0
AND bb.area_id = 'd61523dda339441f80008634c6b91f60'
AND bb.type = '1'
AND to_days( create_time ) = to_days(
now())
ORDER BY
CAST( bb.smoke_number AS UNSIGNED ) ASC
)
查询结果,如下,smoke_number顺序与3,4,2,1 与预期的顺序 3,4,1,2不一致。
**原因:union(all)会使order by失效,解决办法,加limit
4、最终SQL
(
SELECT
aa.*
FROM
apas_smoke aa
WHERE
STATUS = 0
AND aa.area_id = 'd61523dda339441f80008634c6b91f60'
AND aa.type = '3'
AND to_days( create_time ) = to_days(
now())
ORDER BY
CAST( aa.smoke_number AS UNSIGNED ) ASC
LIMIT 2
)
UNION
( SELECT
bb.*
FROM
apas_smoke bb
WHERE
bb.STATUS = 0
AND bb.area_id = 'd61523dda339441f80008634c6b91f60'
AND bb.type = '1'
AND to_days( create_time ) = to_days(
now())
ORDER BY
CAST( bb.smoke_number AS UNSIGNED ) ASC
LIMIT 2
)
查询结果:
问题解决。
mysql5.6 排序失效_mysql 使用union(all) + order by 导致排序失效相关推荐
- mysql left join 索引失效_MySQL索引列上做操作导致索引失效案例分析
索引列上做操作导致索引失效 通常我们认为只要建立索引就可以万事大吉,以为只要建立就一定会使用到,可其实在索引列上的计算.函数.类型转换都可能导致索引失效,所以我们不仅要会创建索引,更重要的是如何正确的 ...
- mysql联合索失效_mysql 联合索引生效的条件、索引失效的条件
1.联合索引失效的条件 联合索引又叫复合索引.两个或更多个列上的索引被称作复合索引. 对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引 ...
- mysql模糊查询索引失效_MySql学习笔记(九):索引失效
数据准备:CREATE TABLE `t_blog` ( `id` int(11) NOT NULL auto_increment, `title` varchar(50) default NULL, ...
- 查询排序_MySQL使用UNION连接两个查询排序失效
概述 UNION 连接数据集关键字,可以将两个查询结果集拼接为一个,会过滤掉相同的记录. UNION ALL 连接数据集关键字,可以将两个查询结果集拼接为一个,不会过滤掉相同的记录 今天在接到一个需求 ...
- mysql索引排序算法_MySQL中利用索引对数据进行排序的基础教程
MySQL中,有两种方式生成有序结果集:一是使用filesort,二是按索引顺序扫描.利用索引进行排序操作是非常快的,而且可以利用同一索引同时进行查找和排序操作.当索引的顺序与ORDER BY中的列顺 ...
- mysql union (all) 后order by的排序失效问题解决
mysql union (all) 后order by的排序失效问题解决 参考文章: (1)mysql union (all) 后order by的排序失效问题解决 (2)https://www.cn ...
- mysql union如何排序_Mysql中UNION用法与排序
最近也是在写项目中碰到的这个问题,需要将两个SELECT查询结果组合起来进行分组排序,想到了用union方法,用TP的union操作根本无法完成复杂的union操作,于是搜罗了一下,先说一下union ...
- mysql部门人员排序设计_MySQL数据库访问性能优化
MYSQL应该是最流行的WEB后端数据库.大量应用于PHP,Ruby,Python,Java 等Web语言开发项目中,无论NOSQL发展多么快,都不影响大部分架构师选择MYSQL作为数据存储. MYS ...
- mysql字符串等于失效_MySql整型索引和字符串索引失效或隐式转换问题
问题概述 写代码的时候,有一段sql,表示该sql存在隐式转换,不走索引. 经过测试排查后,发现是类型varchar的字段, 我使用条件传入了数值型的值. 问题重现 首先我们先创建一张用户表test_ ...
最新文章
- laravel artisan
- redis编译安装:make 的新错误--collect2: ld returned 1 exit status
- RabbitMQ实现工作队列
- 用多态和组合替换多个条件
- Dll注入技术之劫持注入
- php core模块,module.php
- 遇到一个在linux下无法跨网段发送接收广播包的问题
- TensorFlow中文社区
- python可以用del释放资源_Python中垃圾回收和del语句详解
- do while新用法--方便数据验证时跳出
- mybatis逆向工程maven版本idea工具
- 使用Fresco实现简单的显示一张图片
- 十款真正的编程游戏软件
- 冯乐乐之二 shader的数学
- HC-05嵌入式蓝牙串口通讯
- ADNI影像数据解析及下载
- javascript简单介绍总结(二)
- c++哈利波特游戏(流行的版本的破解版)
- pythonrestapicctv_Python Web服务(15) 持续更新
- 3ds max基础知识
热门文章
- python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法
- react-native与原生三种交互模式
- 基于JAVA+Servlet+JSP+MYSQL的毕业生就业管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的培训中心管理系统
- [******] 树问题:普通二叉树的创建与遍历
- 在windows平台下搭建Django项目虚拟环境
- w2008 R2 401 - 未授权: 由于凭据无效,访问被拒绝。
- 百分点零售行业大数据解决方案
- block的界面间传值的使用
- 关于Bugzilla WebService接口