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

use*_*913 5 oracle union sql-order-by ora-00933

我在同时使用 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;
Run Code Online (Sandbox Code Playgroud)

即使在使用 order by 子句运行时也会出现相同的错误,但当我注释掉 order by 子句时运行良好。

我尝试搜索论坛,但无法找到确切问题的解决方案。我在ORACLE Query with ORDER BY 和 UNION中找到了一个,但是由于子查询和太多表之间的联接,我的查询已经太复杂了,我不想实现这个。

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

Eng*_*r T 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;
Run Code Online (Sandbox Code Playgroud)

如果您想对第一个查询的结果进行排序,那么对第二个查询的结果进行排序,这样您就可以这样做:

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;
Run Code Online (Sandbox Code Playgroud)