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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS 7 yum卸载jdk、安装jdk以及配置jdk环境

    CentOS 7 yum卸载jdk、安装jdk以及配置jdk环境CentOS7yum卸载jdk、安装jdk以及配置jdk环境查看是否已经安装jdk通过命令查询是否已经安装jdk//括号中选择一个即可yumlistinstalled|grep[java][jdk]运行结果类似下图则说明系统已经存在jdk,可卸载卸载jdk(若未存在jdk不用执行)卸载的jdk按已存在的jdk版本进行卸载,示例为jdk1.8.0,不知版本号可观上图…

    2022年5月25日
    45
  • 【Mysql】mysql命令常用语句[通俗易懂]

    【Mysql】mysql命令常用语句[通俗易懂]文章目录数据库表增删改查likeunin待完善实践数据库–直接创建字符–createdatabaserxguo;–删除当前指定数据库–dropdatabaserxguo;–创建带初始字符的库–createdatabaserxguo_testDEFAULTCHARACTERSETutf8COLLATEutf8_general_ci;–指定数据库–use`rxguo_test`;表注意数值,字符串,时间自增,默认,非空,注

    2025年9月14日
    5
  • PhpStorm 2021.12.13激活码(注册激活)[通俗易懂]

    (PhpStorm 2021.12.13激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlFN…

    2022年3月30日
    37
  • Tomcat下载——tomcat7、tomcat8、tomcat9官网下载链接

    Tomcat下载——tomcat7、tomcat8、tomcat9官网下载链接1.官网下载链接:https://tomcat.apache.org2.选择Download——>tomcat7/8/9,如下图所示:3.选择32/64位相应下载。4.下载好的zip包进行解压缩即可。…

    2022年5月19日
    45
  • 特立独行的理解_喜欢特立独行的人

    特立独行的理解_喜欢特立独行的人原题链接对一个十进制数的各位数字做一次平方和,称作一次迭代。如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数。1 是一个幸福数。此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68,3 次迭代后得到 100,最后得到 1。则 19 就是幸福数。显然,在一个幸福数迭代到 1 的过程中经过的数字都是幸福数,它们的幸福是依附于初始数字的。例如 82、68、100 的幸福是依附于 19 的。而一个特立独行的幸福数,是在一个有限的区间内不依附于任何其它数字的;其独立性就是依附于它的的幸福数

    2022年8月8日
    8

发表回复

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

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