2017-06-18 131 views
0

在按行排序时,出现一条错误,指出它缺少右括号,但我不知道为什么。SQL在命令语句中缺少右括号

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); 

回答

3

order by未在上的in条件右手侧使用的子查询允许的。 Oracle预计在order by之前的右括号。

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

除此之外,你可能只想group by dept_id(为什么还通过salary?这是没有意义的)。

+0

谢谢。我不知道你无法在“进入”状态下使用订单 – ortz3

+0

@ ortz3 - 那有什么意义? – mathguy

2

由子句的顺序并不在子查询

允许作为mathguy已经指示,order by子句导致引发错误,它不服务于任何目的。

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

下面使用示例模式emp和部门(看起来很像您的表格),因为条件e1.deptno = e.deptno,我特别选择给定部门的最低工资。

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

[email protected]>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