我正在使用Union运算符获取数据。我希望我的输出与正在获取的select查询的顺序相同,但Union按字母顺序对其进行排序。你能建议我一种避免默认排序的方法吗?
发布于 2014-09-24 07:21:42
尝试在如下所示的子查询中执行此操作:
select * from (select x , y ,z from table1
UNION ALL
select x,y,z from table2)
order by y
发布于 2014-09-24 18:04:53
Thilo是正确的:为了安全起见,查询应该总是显式地对结果进行排序。依赖隐式排序在过去造成了许多问题,未来还会继续造成更多问题。
关于UNION ALL
将避免排序的建议几乎总是正确的。它应该可以在11g及更低版本中工作。但12c引入了concurrent execution of union all,它不再保证结果的顺序。
即使现在隐式排序起作用了,添加一个ORDER BY
也总是一个好主意。
发布于 2014-09-24 20:34:46
如果不指定任何ORDER BY
子句,则不应依赖顺序。
UNION
保证了结果的唯一性。10g之前的版本使用排序来删除重复项。较新的Oracle版本也可能(但不是必须)使用哈希表来删除重复项-因此结果不一定要排序。
UNION ALL
不关心唯一性。
您可以简单地键入:
select x , y ,z from table1
UNION ALL
select x,y,z from table2
order by y
Order by
应用于整个结果。
https://stackoverflow.com/questions/25966929
复制相似问题