問題ID: 8328 manager_id = (内側の問合せの結果)
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
hasimohi
投稿数: 14
<問題のsql>
SELECT employee_id, employee_name
FROM employees
WHERE department_id =
(SELECT department_id
FROM departments
WHERE manager_id =
(SELECT employee_id
FROM employees
WHERE salary =
(SELECT MAX(salary)
FROM employees)));
<解説>
SELECT department_id
FROM departments
WHERE manager_id = (内側の問合せの結果)
が実施されます。この問合せでは、マネージャー番号が一番給与額の多い従業員と一致する部署の部署番号を返します。もしも内側の問合せから複数件のデータが返された場合は、単一行演算子を使用しているため、エラーとなります。また、マネージャー番号が一番給与額の多い従業員と一致しない場合は、NULL値を返します。
とあります。
内側の問合せの結果はemployee_idの値を示しています。
すなわち、WHERE manager_id = employee_idとなり、おかしいのではないでしょうか?
SELECT employee_id, employee_name
FROM employees
WHERE department_id =
(SELECT department_id
FROM departments
WHERE manager_id =
(SELECT employee_id
FROM employees
WHERE salary =
(SELECT MAX(salary)
FROM employees)));
<解説>
SELECT department_id
FROM departments
WHERE manager_id = (内側の問合せの結果)
が実施されます。この問合せでは、マネージャー番号が一番給与額の多い従業員と一致する部署の部署番号を返します。もしも内側の問合せから複数件のデータが返された場合は、単一行演算子を使用しているため、エラーとなります。また、マネージャー番号が一番給与額の多い従業員と一致しない場合は、NULL値を返します。
とあります。
内側の問合せの結果はemployee_idの値を示しています。
すなわち、WHERE manager_id = employee_idとなり、おかしいのではないでしょうか?
arashi1977
居住地: 広島
投稿数: 1715
引用:これは英語の話かなぁ…
DEPARTMENTS(部署)表とEMPLOYEES(従業員)表があって、部署のMANAGER(管理職)のIDがEMPLOYEE(従業員)のIDと一致するということは「この従業員がこの部署の管理職である」ということを示すのだと読み取れるので、特におかしくないんじゃないかなぁと思ったりするのですが
内側の問合せの結果はemployee_idの値を示しています。
すなわち、WHERE manager_id = employee_idとなり、おかしいのではないでしょうか?
DEPARTMENTS(部署)表とEMPLOYEES(従業員)表があって、部署のMANAGER(管理職)のIDがEMPLOYEE(従業員)のIDと一致するということは「この従業員がこの部署の管理職である」ということを示すのだと読み取れるので、特におかしくないんじゃないかなぁと思ったりするのですが
Re: Re: 問題ID: 8328 manager_id = (内側の問合せの結果)
msg# 1.1.1
hasimohi
投稿数: 14
ご回答ありがとうございます。
そういうことなんですね
そういうことなんですね