0

Oracle ExpressのSQLのサブクエリを使用して、従業員が部門で取得する最高の給与のsalary_idを取得したいと思います。私が持っているテーブルは次のとおりです。

 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

結果は2つのレコードです:2000と2500

次のステップはそれらの給与の成績を取得することなので、私は以下を使用します。

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

受け取ったエラーは次のとおりです。ORA-01427:単一行のサブクエリが複数の行を返します

SQLのサブクエリを使用してそのSQLコマンドを実行するにはどうすればよいですか?

4

1 に答える 1

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

相関するサブクエリは通常低速であるため、最初の形式が推奨されます。

于 2012-10-14T06:11:32.657 に答える