查询排序顺序问题

Posted

技术标签:

【中文标题】查询排序顺序问题【英文标题】:Query Sort Order Issue 【发布时间】:2016-11-07 20:49:06 【问题描述】:

我有两个查询,我进一步对它们进行联合以获得不同的结果。目前,它们按名称按字母顺序排列。

查询 1:

 Corporate Comp D
 Corporate Comp E

查询 2:

 Corporate Comp A
 Corporate Comp B
 Corporate Comp D
 Corporate Comp E
 Corporate Comp G

所以在联合之后,结果是 A B D E G. 并且它按字母顺序排列,但是,我希望它按第一次查询排序,所以基本上我希望顺序像

最终排序查询

 Corporate Comp D
 Corporate Comp E
 Corporate Comp A
 Corporate Comp B
 Corporate Comp G

【问题讨论】:

(1) 您使用的是什么数据库? (2) 每个查询中是否可以有重复项? 是的,可以有重复,使用 SQL Server 【参考方案1】:

在这种情况下,不要使用UNION。这是一个替代方案:

select qq.col
from ((select q.col, 1 as which
       from query1 q
      ) union all
      (select q.col, 2 as which
       from query2 q
       where not exists (select 1 from query1 q1 where q1.col = q.col)
      )
     ) qq
order by qq.which, qq.col;

或者,您可以使用聚合:

select qq.col
from ((select q.col, 1 as which
       from query1 q
      ) union all
      (select q.col, 2 as which
       from query2 q
      )
     ) qq
group by qq.col
order by min(qq.which), qq.col;

【讨论】:

【参考方案2】:

你可以试试这个:-

select 
    *
from 
(
    select col from query1
    union
    select col from query2
) d
order by 
    case when col in (select col from query1) then 0 else 1 end, 
    col

【讨论】:

【参考方案3】:
select      col

from       (          select distinct 1 as i,col from query1
            union all (select 2,col from query2 minus select 2,col from query1)
           ) t

 order by   i,col      
 ;

【讨论】:

以上是关于查询排序顺序问题的主要内容,如果未能解决你的问题,请参考以下文章

根据列表的顺序对过滤后的查询集进行排序

查询数据库中的排序顺序

按结果优化查询顺序以使用文件排序;

如果未指定“排序依据”,查询会为您的记录集选择啥顺序?

如何根据数组元素的顺序对查询结果进行排序?

按字母顺序对查询结果进行排序,但在排序中排除“the”?