SQL用了Union后的排序问题
最近使用SQL语句进行UNION查询,惊奇的发现:SQL没问题,UNION查询也没问题,都可以得到想要的结果,可是在对结果进行排序的时候,却出问题了。
1.UNION查询没问题
- SELECT `id`,`username`,`mobile`,`time`,id AS leader
- FROM `grouporder_leader`
- WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
- UNION ALL
- SELECT leadorderid,username,mobile,time,null
- FROM `grouporder_partner`
- WHERE courseid=21 and status=1 and merchid=23
结果如下
2.排序就出问题了
- SELECT `id`,`username`,`mobile`,`time`,id AS leader
- FROM `grouporder_leader`
- WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
- ORDER BY time DESC
- UNION ALL
- SELECT leadorderid,username,mobile,time,null
- FROM `grouporder_partner`
- WHERE courseid=21 and status=1 and merchid=23
- ORDER BY time DESC
执行这条SQL语句之后就报错。
3.创建临时表
使用类似于创建临时表的方法保存查询结果,然后对临时表进行查询排序。
- SELECT id,username,mobile,time,leader
- FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
- FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
- UNION ALL
- SELECT leadorderid,username,mobile,time,null
- FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
- )
- ORDER BY time DESC
4.起别名
不知道为什么第3步中查询依旧没有,然后对UNION查询的结果起个别名,然后再查询排序就没问题了。
- SELECT a.id,a.username,a.mobile,a.time,a.leader
- FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
- FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
- UNION ALL
- SELECT leadorderid,username,mobile,time,null
- FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
- ) AS a
- ORDER BY time DESC
结果就正确了
查出来就好说了,再进行去重或者其他操作,也没问题.
- SELECT DISTINCT a.id,a.username,a.mobile,FROM_UNIXTIME(a.time,'%Y/%m/%d') as _time,a.leader
- FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
- FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
- UNION ALL
- SELECT leadorderid,username,mobile,time,null
- FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
- ) AS a
- ORDER BY time DESC
SQL用了Union后的排序问题的更多相关文章
- SQL Server函数---Union与Union All的区别
SQL Server函数---Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称 ...
- Sql Server 2008卸载后再次安装一直报错
sql server 2008卸载之后再次安装一直报错问题. 第一:由于上一次的卸载不干净,可参照百度完全卸载sql server2008 的方式 1. 用WindowsInstaller删除所有与S ...
- SQL Server安装完成后3个需要立即修改的配置选项(转载)
你用安装向导安装了全新的SQL Server,最后你点击了完成按钮.哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的. 是的,你没看 ...
- SQL服务器更改名称后
SQL服务器更改名称后 编写人:CC阿爸 2014-6-15 在日常SQL 2005数据库的操作中,有时安装完成数据库后,再更名,造成部分SQL服务不能正常使用(在SQL2000 时,想都别想更名了) ...
- SQL去掉小数点有效数字后的所有0
原文:SQL去掉小数点有效数字后的所有0 第一种方法 select cast(2.5000000000000 as real) select cast(2 as real) select ...
- 【转载】SQL语句中Union和Union All的区别
在使用到SQL语句进行数据库查询的过程中,如果需要求两个数据集合的并集,一般会使用到联合查询关键字Union或者Union All,其实Union和Union All两者的使用有一定差别,查出来的数据 ...
- SQL Server 安装好后 Always On群组配置
需要对SQL Server必要的端口打开Windows防火墙的入站规则,比如TCP- 1433端口等. 特别注意:由于AG默认需要用到TCP-5022端口,所以该端口务必保证在Windows防火墙中开 ...
- SQL Server Assembly (SQL CLR) 还原数据库后的问题
最近弄项目迁移的时候遇到还原数据库(SQL Server 2008)后遇到的一个问题: 消息 10314,级别 16,状态 11,第 1 行 在尝试加载程序集 ID 65536 时 Microsoft ...
- SQL Server2017 安装完成后找不到启动项解决方案
很多用于当SQL Server2017 安装完成后开始菜单找不到启动项无法启动SQL Server2017 其实你只需要安装一下SSMS-Setup-CHS就可以了 安装完成之后就有了 SSMS-Se ...
随机推荐
- Git_学习_03_ ignore文件配置
一.示例 # 1.Compiled class file *.class bin target # 2.Log file *.log logs # 3. Package Files # *.war * ...
- day 10 字符编码和文件处理 细节整理
pycharm是文本编辑器. 大概理解为: 输出到屏幕上的时候,是解码过的字符串,用 decode 处理的时候要编码成相应的流, encode 成你要用的格式就可以了 1 .字符编码: 字符==== ...
- Tempdb总结
Tempdb 系统数据库是一个全局资源,可供连接到 SQL Server 实例的所有用户使用,并可用于保存下列各项: 显式创建的临时用户对象,例如全局或局部临时表.临时存储过程.表变量或游标. SQL ...
- [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展trim,trimLeft,trimRight方法(2)
我们接着上一篇的继续,在上一篇我们完成了工具库的架构,本文扩展字符串去空格的方法, 一共有3个 1,trimLeft: 去除字符串左边的空格 2,trimRight: 去除字符串右边的空格 3,tri ...
- 修改wamp中mysql的默认空密码
WAMP安装好后,mysql密码是为空的,那么要如何修改呢? 一.打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车. 二.输入"use mysql",意思是使用m ...
- Macbook下安装管理MySQL
下载安装MySQL 1.访问MySQL官网:http://dev.mysql.com/downloads/ 2.下载 MySQL Community Server: 3.Select Platform ...
- 部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)
我们将部署三个节点的 Kubernetes Cluster. k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node. 所有节点的操作系统均为 Ubuntu ...
- linux 卸载安装node npm
1. 卸载node npm (1) 先卸载 npm: sudo npm uninstall npm -g (2) 然后卸载 Node.js. (2.1) 如果是 Ubuntu 系统并使用 apt-ge ...
- (转)Linux下运行python
原文: http://blog.csdn.net/jackywgw/article/details/48847187 在linux命令行下运行python,可以直接输出hello world jack ...
- Kafka、Logstash、Nginx日志收集入门
Nginx作为网站的第一入口,其日志记录了除用户相关的信息之外,还记录了整个网站系统的性能,对其进行性能排查是优化网站性能的一大关键. Logstash是一个接收,处理,转发日志的工具.支持系统日志, ...