2012-10-14 124 views
0

我想在Oracle Express中的SQL中使用子查詢來獲取員工在其部門中獲得的最高薪水的salary_id。我有這些表格是:Oracle SQL中的子查詢

Employee 
Emp_id Salary Dept_id 
100  1000 a101 
200  2000 a101 
300  2500 b102 

Salary 
Grade LowSal HiSal 
1  500 900 
2  901 2000 
3  2001 3000 

首先,我提取出的最高薪水在此查詢各部門:

SELECT Max(e.SALARY) 
FROM EMPLOYEE e 
GROUP BY e.DEPT_ID 

的結果是兩個記錄:2000年和2500

下一步是要得到這些工資的等級,所以我使用以下內容:

SELECT GRADE 
FROM SALARY 
WHERE (SELECT Max(e.SALARY) 
     FROM EMPLOYEE e 
     GROUP BY e.DEPT_ID) BETWEEN LOWSAL AND HIGHSAL; 

錯誤tha t我收到的是:ORA-01427:單行子查詢返回多個行

如何在SQL中使用子查詢執行該SQL命令?

+0

工資表如何鏈接到員工表?連接在哪裏? –

回答

1

有多種方式可以編寫這樣的查詢。您可以將子查詢添加到FROM條款:

SELECT grade 
FROM (SELECT max(salary) AS sal FROM employee GROUP BY dept_id) ms 
JOIN salary ON ms.sal BETWEEN salary.lowsal AND salary.hisal; 

或者你可以使用相關子查詢:

SELECT (SELECT grade FROM salary WHERE max(salary) BETWEEN lowsal AND hisal) 
FROM employee 
GROUP BY dept_id 

相關子查詢通常較慢,因此第一種形式是首選。

+0

任何其他解決方案,第一個我得到一個錯誤 – Layla

+0

什麼是錯誤? –

+2

@Manolo:第一個工作,請看這裏:http://sqlfiddle.com/#!4/0a1ab/1複製時您必須已經發生錯誤。 –