SELECT employee_id a, job_id, department_id
FROM employees
UNION ALL
SELECT employee_id , job_id, department_id
FROM job_history
UNION ALL
SELECT employee_id, job_id, department_id
FROM job_history
ORDER BY a如上面例子,当两个select查询使用集合运算符时,可以使用别名排序,但三个select查询使用集合运算符时就无法使用别名进行排序,如果select中不使用别名,可以使用列名排序。如果有两个select使用相同别名就可以使用别名排序,请问是什么原因?最好能解答下集合查询时处理排序和别名的原理,谢谢!

解决方案 »

  1.   

    没啥原理,就是这样的。
    不过,可以用下面语句:
    with b as(
    select 1 as a , 2 as job_id, 3 as dept_id from dual
    union all
    select 2 , 2 as job_id, 3 as dept_id from dual
    union all
    select 3  , 2 as job_id, 3 as dept_id from dual)
    select * from b 
    order by b.a
      

  2.   

    我还是想知道当三个个SELECT进行union时oracle是怎么处理的。
    而且多个SELECT进行union时,只要第一个和倒数第二个SELECT里使用相同别名,就可以使用别名排序,为什么呢?
    不过谢谢楼上的。