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 ehcache配置以及使用(afterPropertiesSet)

    spring配置ehcache例子:[url]http://blog.csdn.net/linfanhehe/article/details/7693091[/url][color=red][b]主要特性[/b][/color]1.快速.2.简单.[b]3.多种缓存策略[/b]4.缓存数据有两级:内存和磁盘,因此无需担心…

    2022年4月7日
    121
  • android studio toast不显示_androidtoast封装

    android studio toast不显示_androidtoast封装AndroidToast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失。信息可以是简单的文本,也可以是复杂的图片及其他内容(显示一个view)。1.简单用法Toast.makeText(midlet.getApplicationContext(),”用户名不能为空”,Toast.LENGTH_LONG).show();2.自定义显示位置效果代码toast=Toast.mak…

    2025年8月30日
    7
  • visio 密钥_激活visio2013的产品密钥

    visio 密钥_激活visio2013的产品密钥visio密钥:软件已经安装成功。希望对大家有用。Q37MJ-MMDGH-PWGWW-73YBQ-H3398

    2022年8月13日
    9
  • 大数据在农业应用_让脸变干净的小妙招

    大数据在农业应用_让脸变干净的小妙招民以食为天。互联网与农业深度融合,推动农业大数据发展。在互联网时代,通过大数据分析,让智慧农业发展更迅速。搭乘智慧农业快车,今后农业种地将不再是脏累差的工作,而会变得越来越简单、舒服,收益也会不断提高,体面高端的“新农人”职业一定会受到追捧。掘金农业大数据当前,“互联网+”已经上升为国家战略,成为发展的新增长点,是中央和地方政策扶持的重点,也是投资的焦点。在推进大众创业、万众创新中,“互联网+”呈…

    2022年10月5日
    3
  • Java 实现异步调用

    Java 实现异步调用首先我遇到的问题是接口调用时需要更新缓存而更新缓存又是个说快不快的过程所以打算做异步调用返回我所需要的结果即可,至于缓存什么时候更新完就不是我所需要关注的了废话不多说上代码publicclassMyExecutor{  privateExecutorServiceexecutor=Executors.newCachedThreadPool();  publi…

    2022年7月27日
    13
  • sql存储过程实例详解_sql server创建存储过程

    sql存储过程实例详解_sql server创建存储过程问题提出  我使用过几次SQLServer,但所有与数据库的交互都是通过应用程序的编码来实现的。我不知到在哪里使用存储过程,也不了解实现存储过程需要做哪些工作。希望能详细说明。  存储过程是存储于数据库中的一组T-SQL语句。有了存储过程之后,与数据库的交互就没有必要在程序中写一堆的SQL语句,而只需用一条语句调用适当的存储过程来完成就可以了。另外,由于代码是存储在数据库

    2022年9月26日
    2

发表回复

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

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