使用union运算符顺序获取数据

时间:2014-09-22 04:56:55

标签: sql oracle union

我使用Union运算符获取数据。我希望我的输出与我的选择查询获取的顺序相同,而是Union按字母顺序对其进行排序。你可以建议我一种避免默认排序的方法。

3 个答案:

答案 0 :(得分:1)

尝试在这样的子查询中执行此操作:

select * from (select x , y ,z from table1 
               UNION ALL
               select x,y,z from table2)
order by y

答案 1 :(得分:1)

Thilo是正确的:为了安全起见,查询应始终明确地对结果进行排序。依赖隐式排序在过去引起了许多问题,将来会继续引发更多问题。

UNION ALL将避免排序的建议几乎总是正确的。它应该在11g及以下工作。但是12c引入了concurrent execution of union all,它不再保证结果的顺序。

即使隐式排序现在起作用,添加ORDER BY总是一个好主意。

答案 2 :(得分:0)

如果您未指定任何ORDER BY条款,则不应依赖订单 UNION保证结果的统一性。前10g版本使用排序删除重复。较新的Oracle版本也可能(但不一定)使用哈希表来删除重复项 - 因此结果不一定是排序的。

UNION ALL并不关心uniquines。

您只需输入:

即可
select x , y ,z from table1 
UNION ALL
select x,y,z from table2
order by y

Order by适用于整个结果。