Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 未选择列的并集和排序_Sql_Oracle - Fatal编程技术网

Sql 未选择列的并集和排序

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

假设我有一个表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 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;