Oracle 子查询中的订单依据

Oracle 子查询中的订单依据,oracle,Oracle,我想在不使用min()函数的情况下从Employees表中查看拥有最低工资的员工的详细信息 SELECT * FROM Employees WHERE SALARY IN (SELECT SALARY FROM Employees order by salary) AND ROWNUM=1 这里显示的是错误 ORA-00907:缺少右括号 90700000-“缺少右括号” *原因: *操作:第5行第18列出现错误 那么这里的

我想在不使用min()函数的情况下从Employees表中查看拥有最低工资的员工的详细信息

SELECT *
FROM Employees 
WHERE SALARY IN (SELECT SALARY
                 FROM Employees
                 order by salary)
AND ROWNUM=1
这里显示的是错误

ORA-00907:缺少右括号 90700000-“缺少右括号” *原因:
*操作:第5行第18列出现错误

那么这里的错误是什么

我在这个网站上阅读

参见oracle的语法


in子句中不支持ORDER BY,因为它没有任何意义。过滤集合中的行,而过滤顺序并不重要。您应该对结果行进行排序,然后选择第一行(ROWNUM=1)

您可以从已排序的select中进行选择,然后选择第一行

 select * from
    ( SELECT *
                     FROM Employees
                     order by salary ) A 
    where rownum = 1

由于rownum将在order by之前执行,因此无法在一次选择中执行。这就是为什么我们需要在附加选择中对其进行包装。

您也可以使用限制运算符

    SELECT *
    FROM Employee 
    WHERE salary IN (SELECT salary
             FROM Employee
             order by salary)
    LIMIT 1
我曾经验证过这一点。您可以在此处进行验证:

下面是表创建和引导语句

    CREATE TABLE Employee
    (
    name varchar(50),
    salary double
    );

    insert into Employee values('bob', 80000.00);
    insert into Employee values('john', 100000.00);

甲骨文没有限制。但它不起作用。只选择了随机的薪水。因为没有提到太多关于这个平台的信息,所以我假设它是mysql。是的,查看错误代码将有助于弄清这一点:)@deepakmarathe,错误代码“ORA-00907:缺少右括号”应该是一个很大的线索,表明它不是mysql:)