我遇到了将Oracle的并集子句和order by子句一起使用的问题。
我有两个复杂的查询(其中包含子查询),每个查询都有一个order by子句。我需要将两者的输出合并并返回结果。当我运行它时,我得到错误ORA-00933:SQL命令没有正确结束。
但是,当我用两篇文章中的条款来注释顺序时,它就起作用了。
为了测试这一点,我创建了一个简单的查询,如下所示
select * from employee where employee_id=2 order by name
union
select * from employee where employee_id=3 order by name;
即使这样,当使用order by子句运行时也会出现同样的错误,但当我评论order by子句时运行得很好。
我试着在论坛上搜索,但找不到确切问题的解决方案。我在ORACLE Query中发现了一个带有ORDER BY和UNION的查询,但由于子查询和太多表之间的联接,我的查询已经太复杂了,我不想实现它。
有人能帮我解决问题的根本原因吗。
试试这个代码:
select e1.name name /* e1.* */
from employee e1
where employee_id = 2
union
select
e2.name name /* e2.* */
from employee e2
where employee_id = 3
order by name;
如果你想对第一个查询的结果排序,然后对第二个查询的查询结果排序,这样你就可以这样做:
select 1 query, e1.name name /* e1.* */
from employee e1
where employee_id = 2
union
select
2 query, e2.name name /* e2.* */
from employee e2
where employee_id = 3
order by query, name;
组合多个查询时,在最后一条语句上只能有一个ORDER BY
。ORDER BY
子句作用于整个集合。
请参阅Oracle文档:
不能在这些运算符的子查询中指定order_by_clause。
如果您希望在每个查询中按顺序排序,则必须将其包装在其他select中作为子查询:
select * from (select * from employee where employee_id=2 order by name)
union
select * from (select * from employee where employee_id=3 order by name);