Sql 未选择列的并集和排序
假设我有一个表a,有a_1和a_2列 我只对a_1列感兴趣,所以我可以这样写:Sql 未选择列的并集和排序,sql,oracle,Sql,Oracle,假设我有一个表a,有a_1和a_2列 我只对a_1列感兴趣,所以我可以这样写: select a_1 from A; 但是,我希望它按a_2列排序,因此我可以这样写: select a_1 from A order by a_2 desc; 现在我想做一个工会: select a_1 from A where <some filters> union select a_1 from A where <some other filters> order by a_2 d
select a_1 from A;
但是,我希望它按a_2列排序,因此我可以这样写:
select a_1 from A order by a_2 desc;
现在我想做一个工会:
select a_1 from A where <some filters>
union
select a_1 from A where <some other filters>
order by a_2 desc;
“选择a_2”部分困扰着我:我不想在结果中显示它,我如何隐藏此信息?假设两列上的并集都会产生:
a_1 a_2
A 1
A 3
B 2
那么只有a_1上的并集才能给出
a_1
A
B
您如何知道根据A_2列的值1和3将A放置在何处
当UNION或DISTINCT时,ORDER BY中只允许选定列
但是,有些dbms产品在UNION ALL时允许非选定列 从概念上讲,在只对a_1进行联合之后,按a_2排序是没有意义的。从Oracle的角度来看,对于任一查询中任何不同的a_1值,都有可能返回许多不同的a_2值。因此,有许多可能的排序顺序 当然,您可以嵌套查询,以便在结果中只得到一个_1
select a_1
from (select a_1, a_2 from A where <some filters>
union
select a_1, a_2 from A where <some other filters>) sub_q
order by a_2 desc;
当然,从性能的角度来看,使用UNIONALL而不是union是有意义的,除非您确实希望查找并消除重复行。如果两个查询都来自同一个表,那么将单个查询与or一起使用可能比编写两个不同查询的并集更有意义
select a_1
from (select a_1, a_2 from A where <some filters>
union
select a_1, a_2 from A where <some other filters>) sub_q
order by a_2 desc;