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

Oracle:Order by Union返回ORA-00933:SQL命令未正确结束,oracle,sql-order-by,union,ora-00933,Oracle,Sql Order By,Union,Ora 00933,我对同时使用Oracle的union和order by子句有异议 我有两个复杂的查询(其中包含子查询),每个查询都有一个ORDERBY子句。我需要合并两者的输出并返回结果。当我运行它时,我得到错误ORA-00933:SQL命令没有正确结束 但是,当我在它们两个中注释出ORDERBY子句时,它就起作用了 为了测试这一点,我创建了一个简单的查询,如下所示 select * from employee where employee_id=2 order by name union select * f

我对同时使用Oracle的union和order by子句有异议

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

但是,当我在它们两个中注释出ORDERBY子句时,它就起作用了

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

select * from employee where employee_id=2 order by name
union
select * from employee where employee_id=3 order by name;
即使这样,在使用ORDERBY子句运行时也会出现相同的错误,但在注释ORDERBY子句时运行良好

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


有人能帮我解决问题的根本原因吗。

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

见:

不能在这些运算符的子查询中指定order_by_子句

请尝试以下代码:

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;

在集合的任何并集的最末端只能有一个
orderby
。请再次检查我的答案。我已经尝试过了。这不起作用。它给出错误:ORA-00904:“ORDERBY子句中使用的列名”:无效标识符非常感谢快速帮助。我对你的第一个建议做了一点修改,它对我起了作用。我刚刚在select和ORDERBY子句中将列别名更改为name1。