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

时间:2014-04-18 15:00:06

标签: oracle sql-order-by union ora-00933

我在使用Oracle的union和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子句运行时,即使这会产生相同的错误,但是当我通过子句对该命令进行注释时运行良好。

我尝试搜索论坛,但我找不到确切问题的解决方案。我在ORACLE Query with ORDER BY and UNION找到了一个但由于我的查询因太多表之间的子查询和连接而太过复杂,我不想实现它。

有人可以帮我解决问题的根本原因。

2 个答案:

答案 0 :(得分:3)

在最后一个语句中,在组合多个查询时,只能有一个ORDER BYORDER BY子句作用于整个集。

请参阅Oracle Documentation

  

您无法在这些运算符的子查询中指定order_by_clause。

答案 1 :(得分:3)

试试这段代码:

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;