码迷,mamicode.com
首页 > 编程语言 > 详细

解决UNION ALL合并两个结果集后排序的问题

时间:2018-02-08 15:37:45      阅读:363      评论:0      收藏:0      [点我收藏+]

标签:统一   默认值   where   解决   date   post   span   结果   order   

日常开发中,如果实用UNION ALL合并两个已经排好序的结果集的时候,需求是第二个结果集数据排在第一个结果集数据下面,单纯的实用order by是无效的,因为order by的优先级比UNION ALL低。

例如:

select one.*  from (select t1.* from table1 t1 where 1=1 and t1.day >3 order by t1.create_date desc)  one 

UNION ALL

select two.*  from (select t2.* from table2 t2 where 1=1 and t1.day <=3 order by t2.create_date desc)  two

此时查询结果并不是安好two排序好之后  排在  one下面,如果要实现这样的需求,可以使用一个临时字段作为排序字段,该字段的作用是使合并后的结果集有一个统一的排序字段,合并前的结果集分别给默认值1和2,这样在合并后的结果集可以排序了.

select all.* from (select one.*  from (select t1.*,‘1‘ as ‘sortBy‘ from table1 t1 where 1=1 and t1.day >3 order by t1.create_date desc)  one 

UNION ALL

select two.*  from (select t2.* ,‘2‘  as  ‘sortBy‘ from table2 t2 where 1=1  and t.2day <=3 order by t2.create_date desc)  two) all where 1=1 order by all.sortBy asc

解决方案的巧妙之处就是,利用一个自定义的字段实现两个结果集的合并后排序。

解决UNION ALL合并两个结果集后排序的问题

标签:统一   默认值   where   解决   date   post   span   结果   order   

原文地址:https://www.cnblogs.com/mark8080/p/8431419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!