3

我在同时使用 Oracle 的 union 和 order by 子句时遇到问题。

我有两个复杂的查询(其中包含子查询),每个查询都有一个 order by 子句。我需要合并两者的输出并返回结果。当我运行它时,我收到错误 ORA-00933: SQL 命令未正确结束。

但是当我在它们两个中注释掉 order by 子句时,它就起作用了。

为了测试这一点,我创建了一个简单的查询,如下所示

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的查询,但是由于子查询和太多表之间的连接,我的查询已经太复杂了,我不想实现这个。

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

4

2 回答 2

4

试试这个代码:

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;
于 2014-04-18T15:03:32.883 回答
3

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

请参阅Oracle 文档

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

于 2014-04-18T15:03:06.083 回答