Oracle:Order by Union返回ORA-00933:SQL命令未正确结束



我遇到了将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 BYORDER 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);

相关内容

  • 没有找到相关文章

最新更新