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

Sql 使用union运算符按顺序获取数据,sql,oracle,union,Sql,Oracle,Union,我正在使用Union运算符获取数据。我希望输出的顺序与select查询获取的顺序相同,而是按字母顺序进行排序。你能给我建议一种避免默认排序的方法吗。在子查询中尝试这样做: select * from (select x , y ,z from table1 UNION ALL select x,y,z from table2) order by y Thilo是正确的:为了安全起见,查询应该总是显式地对结果排序。依赖隐式排序在过去造

我正在使用Union运算符获取数据。我希望输出的顺序与select查询获取的顺序相同,而是按字母顺序进行排序。你能给我建议一种避免默认排序的方法吗。

在子查询中尝试这样做:

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

Thilo是正确的:为了安全起见,查询应该总是显式地对结果排序。依赖隐式排序在过去造成了许多问题,将来还会继续造成更多问题

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


即使隐式排序现在起作用,添加一个
ORDER BY

始终是一个好主意。如果不指定任何
ORDER BY
子句,则不应依赖该ORDER。
UNION
保证结果的唯一性。10g之前的版本使用排序删除重复项。较新的Oracle版本也可能(但不是必须)使用哈希表来删除重复项,因此结果不必排序

UNION ALL
不关心uniquines

您只需键入:

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

排序依据
适用于整个结果。

也许联合所有人都可以避免排序。但是,为了安全起见,必须指定显式排序顺序。也许可以为此添加一个额外的列(包含三个部分的1,2,3)。Union都做到了这一点。谢谢你,伙计:)看,这似乎也解决了完全相同的问题。记住,所有工会都不会剔除重复的。由于11g(I thimk)联合将不再默认排序。