SQL用了Union后的排序问题

SQL用了Union后的排序问题

最近使用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  

结果如下
SQL用了Union后的排序问题

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  

结果就正确了

SQL用了Union后的排序问题

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

    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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113608.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring整合log4j_spring连接数据库的配置

    spring整合log4j_spring连接数据库的配置常用日志框架log4j、log4j2(log4j的升级版,最常用的)、logback(spring boot默认)、Jboss-logging…等slf4 是日志接口规范,代码对接slf4,实现和具体日志框架解耦,无需修改编码即可切换日志框架。修改pom依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st

    2022年8月8日
    3
  • cmd炫酷代码简单_怎么弄电脑炫酷代码

    cmd炫酷代码简单_怎么弄电脑炫酷代码事先准备:新建一个txt,后缀名改成cmd(或bat)里面写代码即可声明:文章目录cmd炫酷代码大全1.循环类1.1.黑客王国1.2.命令tree1.3.我是这条街,这条街,最靓的仔1.4.数字点阵1.5.数字王国加强版2.其他类2.1.观看星球大战完结cmd炫酷代码大全1.循环类1.1.黑客王国coloraechooff:123echo0101010010100101010101010101010101010101010101010101001010101echo10101

    2022年4月19日
    176
  • 深入理解PHP的GC(Garbage collection)问题「建议收藏」

    深入理解PHP的GC(Garbage collection)问题

    2022年2月19日
    50
  • ubuntu更改内核版本_ubuntu切换内核进入系统

    ubuntu更改内核版本_ubuntu切换内核进入系统背景新安装的ubuntu20内核版本是5.8,对于我个人来说太高了,需要安全地更换内核到低版本。如果是需要内核升级的,本文也适用。多内核并存或者删除其他内核方法同样适用。一、检查自己的内核版本uname-aLinuxlinux5.4.0-66-generic#74-UbuntuSMPWedJan2722:54:38UTC2021x86_64x86_64x86_64GNU/Linux我的内核也就是5.4二、下载所需内核选择1:安装apt最新的内核版本sudo

    2022年8月23日
    67
  • 什么是服务降级?「建议收藏」

    什么是服务降级?「建议收藏」服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。服务降级方式:服务接口拒绝服务:无用户特定信息,页面能访问,但是添加删除提示服务器繁忙。页面内容也可在Varnish或CDN内获取。 页面拒绝服务:页面提示由于服务繁忙此服务暂停。跳转到varnish或nginx的一个静态页面。

    2022年6月3日
    85
  • 什么是卫语句(卫语句)

    如果条件语句极其复杂,就应该将条件语句拆解开,然后逐个检查,并在条件为真时立刻从函数中返回,这样的单独检查通常被称之为“卫语句”(guardclauses)摘自《重构—改善既有代码的设计》卫语句的效果就是将原来需要仔细阅读代码、细心整理逻辑的条件判断整理成一眼能看透的逻辑关系,效果就像以下:if(it==活的){if(it==人){if(it!=女人){…

    2022年4月18日
    107

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号