最近使用SQL语句进行UNION查询,惊奇的发现:SQL没问题,UNION查询也没问题,都可以得到想要的结果,可是在对结果进行排序的时候,却出问题了。

1.UNION查询没问题

  1. SELECT `id`,`username`,`mobile`,`time`,id AS leader
  2. FROM `grouporder_leader`
  3. WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
  4. UNION ALL
  5. SELECT leadorderid,username,mobile,time,null
  6. FROM `grouporder_partner`
  7. WHERE courseid=21 and status=1 and merchid=23

结果如下

2.排序就出问题了

  1. SELECT `id`,`username`,`mobile`,`time`,id AS leader
  2. FROM `grouporder_leader`
  3. WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
  4. ORDER BY time DESC
  5. UNION ALL
  6. SELECT leadorderid,username,mobile,time,null
  7. FROM `grouporder_partner`
  8. WHERE courseid=21 and status=1 and merchid=23
  9. ORDER BY time DESC

执行这条SQL语句之后就报错。



3.创建临时表

使用类似于创建临时表的方法保存查询结果,然后对临时表进行查询排序。

  1. SELECT id,username,mobile,time,leader
  2. FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
  3. FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
  4. UNION ALL
  5. SELECT leadorderid,username,mobile,time,null
  6. FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
  7. )
  8. ORDER BY time DESC

4.起别名

不知道为什么第3步中查询依旧没有,然后对UNION查询的结果起个别名,然后再查询排序就没问题了。

  1. SELECT a.id,a.username,a.mobile,a.time,a.leader
  2. FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
  3. FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
  4. UNION ALL
  5. SELECT leadorderid,username,mobile,time,null
  6. FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
  7. ) AS a
  8. ORDER BY time DESC

结果就正确了

查出来就好说了,再进行去重或者其他操作,也没问题.

    1. SELECT DISTINCT a.id,a.username,a.mobile,FROM_UNIXTIME(a.time,'%Y/%m/%d') as _time,a.leader
    2. FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader
    3. FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1
    4. UNION ALL
    5. SELECT leadorderid,username,mobile,time,null
    6. FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
    7. ) AS a
    8. ORDER BY time DESC

SQL用了Union后的排序问题的更多相关文章

  1. SQL Server函数​---Union与Union All的区别

    SQL Server函数---Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称 ...

  2. Sql Server 2008卸载后再次安装一直报错

    sql server 2008卸载之后再次安装一直报错问题. 第一:由于上一次的卸载不干净,可参照百度完全卸载sql server2008 的方式 1. 用WindowsInstaller删除所有与S ...

  3. SQL Server安装完成后3个需要立即修改的配置选项(转载)

    你用安装向导安装了全新的SQL Server,最后你点击了完成按钮.哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的. 是的,你没看 ...

  4. SQL服务器更改名称后

    SQL服务器更改名称后 编写人:CC阿爸 2014-6-15 在日常SQL 2005数据库的操作中,有时安装完成数据库后,再更名,造成部分SQL服务不能正常使用(在SQL2000 时,想都别想更名了) ...

  5. SQL去掉小数点有效数字后的所有0

    原文:SQL去掉小数点有效数字后的所有0 第一种方法 select cast(2.5000000000000   as  real) select cast(2   as  real) select ...

  6. 【转载】SQL语句中Union和Union All的区别

    在使用到SQL语句进行数据库查询的过程中,如果需要求两个数据集合的并集,一般会使用到联合查询关键字Union或者Union All,其实Union和Union All两者的使用有一定差别,查出来的数据 ...

  7. SQL Server 安装好后 Always On群组配置

    需要对SQL Server必要的端口打开Windows防火墙的入站规则,比如TCP- 1433端口等. 特别注意:由于AG默认需要用到TCP-5022端口,所以该端口务必保证在Windows防火墙中开 ...

  8. SQL Server Assembly (SQL CLR) 还原数据库后的问题

    最近弄项目迁移的时候遇到还原数据库(SQL Server 2008)后遇到的一个问题: 消息 10314,级别 16,状态 11,第 1 行 在尝试加载程序集 ID 65536 时 Microsoft ...

  9. SQL Server2017 安装完成后找不到启动项解决方案

    很多用于当SQL Server2017 安装完成后开始菜单找不到启动项无法启动SQL Server2017 其实你只需要安装一下SSMS-Setup-CHS就可以了 安装完成之后就有了 SSMS-Se ...

随机推荐

  1. Git_学习_03_ ignore文件配置

    一.示例 # 1.Compiled class file *.class bin target # 2.Log file *.log logs # 3. Package Files # *.war * ...

  2. day 10 字符编码和文件处理 细节整理

    pycharm是文本编辑器. 大概理解为:  输出到屏幕上的时候,是解码过的字符串,用 decode 处理的时候要编码成相应的流, encode 成你要用的格式就可以了 1 .字符编码: 字符==== ...

  3. Tempdb总结

    Tempdb 系统数据库是一个全局资源,可供连接到 SQL Server 实例的所有用户使用,并可用于保存下列各项: 显式创建的临时用户对象,例如全局或局部临时表.临时存储过程.表变量或游标. SQL ...

  4. [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展trim,trimLeft,trimRight方法(2)

    我们接着上一篇的继续,在上一篇我们完成了工具库的架构,本文扩展字符串去空格的方法, 一共有3个 1,trimLeft: 去除字符串左边的空格 2,trimRight: 去除字符串右边的空格 3,tri ...

  5. 修改wamp中mysql的默认空密码

    WAMP安装好后,mysql密码是为空的,那么要如何修改呢? 一.打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车. 二.输入"use mysql",意思是使用m ...

  6. Macbook下安装管理MySQL

    下载安装MySQL 1.访问MySQL官网:http://dev.mysql.com/downloads/ 2.下载 MySQL Community Server: 3.Select Platform ...

  7. 部署 k8s Cluster(上)- 每天5分钟玩转 Docker 容器技术(118)

    我们将部署三个节点的 Kubernetes Cluster. k8s-master 是 Master,k8s-node1 和 k8s-node2 是 Node. 所有节点的操作系统均为 Ubuntu ...

  8. linux 卸载安装node npm

    1. 卸载node npm (1) 先卸载 npm: sudo npm uninstall npm -g (2) 然后卸载 Node.js. (2.1) 如果是 Ubuntu 系统并使用 apt-ge ...

  9. (转)Linux下运行python

    原文: http://blog.csdn.net/jackywgw/article/details/48847187 在linux命令行下运行python,可以直接输出hello world jack ...

  10. Kafka、Logstash、Nginx日志收集入门

    Nginx作为网站的第一入口,其日志记录了除用户相关的信息之外,还记录了整个网站系统的性能,对其进行性能排查是优化网站性能的一大关键. Logstash是一个接收,处理,转发日志的工具.支持系统日志, ...