SQL按顺序在命令中缺少右括号

时间:2017-06-18 21:30:37

标签: sql oracle

在逐行排序中,我收到一条错误消息,说它错过了右括号,但我不明白为什么。

SELECT LAST_NAME AS "Last Name", DEPARTMENT_ID AS "Department Id", SALARY AS 
Salary
FROM EMPLOYEES JOIN DEPARTMENTS
USING(DEPARTMENT_ID)
WHERE SALARY IN (SELECT MIN(SALARY)
            FROM EMPLOYEES
            GROUP BY DEPARTMENT_ID, SALARY
            ORDER BY DEPARTMENT_ID);

2 个答案:

答案 0 :(得分:5)

order by条件的右侧使用的子查询中不允许使用

in。 Oracle期望order by之前的右括号。

订购in条件中使用的子查询的结果是没有意义的。

除此之外,您可能只想group by dept_id(为什么salary?这没有意义)。

答案 1 :(得分:3)

子查询中不允许使用order by子句

正如mathguy指出的那样,order by子句会导致抛出错误,并且它不会用于任何目的。

在查看您的查询后,我怀疑您想要执行相关子查询(在内部(子)查询中使用外部查询中的值)。

下面使用示例模式emp和dept(看起来很像你的表),由于条件e1.deptno = e.deptno,我特意选择给定部门的最小工资。

具体而言,您可能担心与特定部门相关的最低工资。

SCOTT@dev>SELECT
  2      e.ename,
  3      e.sal,
  4      d.*
  5  FROM
  6      emp e
  7      JOIN dept d ON e.deptno = d.deptno
  8  WHERE
  9          1 = 1
 10      AND
 11          e.sal IN (
 12              SELECT
 13                  MIN(e1.sal)
 14              FROM
 15                  emp e1
 16              WHERE
 17                  e1.deptno = e.deptno
 18          )
 19  ORDER BY d.deptno;

ENAME   SAL   DEPTNO  DNAME       LOC       
MILLER  1300  10      ACCOUNTING  NEW YORK  
SMITH   800   20      RESEARCH    DALLAS    
JAMES   950   30      SALES       CHICAGO