我使用Union运算符获取数据。我希望我的输出与我的选择查询获取的顺序相同,而是Union按字母顺序对其进行排序。你可以建议我一种避免默认排序的方法。
答案 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
适用于整个结果。