ORDER by导致Oracle SQL子查询语法错误

ORDER by导致Oracle SQL子查询语法错误,sql,oracle,subquery,ora-00907,Sql,Oracle,Subquery,Ora 00907,我在Oracle SQL查询中遇到语法错误。这个查询应该可以让我找到员工所在的部门。如果该员工没有部门(null),我需要层次结构上第一个经理的部门,该经理有一个部门 SELECT department_id FROM department WHERE department_id = ( SELECT department_id FROM employee WHERE department_id IS NOT NULL AND rownum = 1 start WITH

我在Oracle SQL查询中遇到语法错误。这个查询应该可以让我找到员工所在的部门。如果该员工没有部门(null),我需要层次结构上第一个经理的部门,该经理有一个部门

SELECT department_id FROM department
WHERE department_id =
(
    SELECT department_id FROM employee
    WHERE department_id IS NOT NULL AND rownum = 1
    start WITH employee_id = 19
    connect by employee_id = prior manager_id
    ORDER BY level
);
错误消息如下:

ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Error at Line: 8 Column: 2
我编写了一个替代查询,它完成了这项工作。但我对它不是很满意

SELECT department_id FROM department
WHERE department_id = 
(
    SELECT department_id FROM employee
    WHERE level =
    (
        SELECT MIN(level) FROM employee
        WHERE department_id IS NOT NULL
        start WITH employee_id = 19
        connect by employee_id = prior manager_id
    )
    start WITH employee_id = 19
    connect by employee_id = prior manager_id
);
您知道如何修复第一个查询吗?还是简化第二个?
先谢谢你

在您的第一个查询中,@Barbaros正确地说,
orderby
是不需要的,甚至
rownum=1
也不会做您想的事情

以下查询是否满足您的要求:

SELECT
    E.EMPLOYEE_ID,
    CASE WHEN E.DEPARTMENT_ID IS NOT NULL 
         THEN E.DEPARTMENT_ID
         ELSE LAG(D.DEPARTMENT_ID IGNORE NULLS) OVER(ORDER BY LEVEL)
    END AS DEPARTMENT_ID
FROM
    EMPLOYEE E
    LEFT JOIN DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
START WITH E.EMPLOYEE_ID = 19
CONNECT BY E.EMPLOYEE_ID = PRIOR E.MANAGER_ID

干杯

在子查询中不需要排序。只需按级别删除
订单即可
。我可以确定,我得到的是层次结构中级别最低的员工(部门不为空)?非常感谢!我想这对我来说是个好办法。尽管我必须调整查询以在Oracle 10g下工作。第5行:
ELSE-first\u值(D.DEPARTMENT\u ID忽略空值)超过(在1个后续行和无界后续行之间按级别排序)