Re: 自己結合について
yokoyama68
投稿数: 28
すみませんが、この問題自体がかなり意地悪なので説明が抽象的になってしまいます
この問題は以下2つのSQLが提示されています
・自己結合
SELECT m.employee_name, e.manager_id FROM employees e
RIGHT OUTER JOIN employees m on (e.manager_id = m.manager_id)
WHERE e.employee_id = 1008;
・副問い合わせ
SELECT employee_name, manager_id FROM employees
WHERE manager_id = (SELECT manager_id FROM employees WHERE employee_id = 1008);
自己結合のSQLですが、通常の自己結合のSQLのサンプルとして使われない
ようなSQLです わざと困惑させるようなSQLを選んでいると思われます
このケースであれば、副問い合わせのほうが一般的です
問題文は『EMPLOYEE_IDが「1008」の従業員と上司が同じである従業員、
つまり「1008」の同僚を求める問題です。』
とありますので、
1.e表(自分)とm表(同僚)を結合
2.結合結果から自分のidで絞り込む
を行っております
この問題の自己結合SQLは完全に理解しなくてもいいかと思います
その代わりに、副問い合わせSQLはきちんと理解した上で、同等の
自己結合SQLを見つけるのが解法になると思われます
ポイントとしてはこの問題の結合条件が「e.manager_id = m.manager_id」で
あることを見抜けるかどうかになります
副問い合わせSQL側は素直に「WEHERE [m.]manager_id = (SELECT [e.]manager_id」が
イメージできると思われます
それに比べて自己結合SQLを直接理解するのであれば、往々にして直観的に
なってしまいますが、しいて言えば
×「e.employee_id = m.employee_id」
自分と同じマネージャの同僚を求めるはずなのに、自分を求めている
×「e.manager_id = m.employee_id」
自分と同じマネージャの同僚を求めるはずなのに、自分のマネージャを求めている
〇「e.manager_id = m.manager_id」
自分と同じマネージャの同僚を求めている(きっとこのあと絞りこむはず)
のような感じで推測していければと思います
この問題は以下2つのSQLが提示されています
・自己結合
SELECT m.employee_name, e.manager_id FROM employees e
RIGHT OUTER JOIN employees m on (e.manager_id = m.manager_id)
WHERE e.employee_id = 1008;
・副問い合わせ
SELECT employee_name, manager_id FROM employees
WHERE manager_id = (SELECT manager_id FROM employees WHERE employee_id = 1008);
自己結合のSQLですが、通常の自己結合のSQLのサンプルとして使われない
ようなSQLです わざと困惑させるようなSQLを選んでいると思われます
このケースであれば、副問い合わせのほうが一般的です
問題文は『EMPLOYEE_IDが「1008」の従業員と上司が同じである従業員、
つまり「1008」の同僚を求める問題です。』
とありますので、
1.e表(自分)とm表(同僚)を結合
2.結合結果から自分のidで絞り込む
を行っております
この問題の自己結合SQLは完全に理解しなくてもいいかと思います
その代わりに、副問い合わせSQLはきちんと理解した上で、同等の
自己結合SQLを見つけるのが解法になると思われます
ポイントとしてはこの問題の結合条件が「e.manager_id = m.manager_id」で
あることを見抜けるかどうかになります
副問い合わせSQL側は素直に「WEHERE [m.]manager_id = (SELECT [e.]manager_id」が
イメージできると思われます
それに比べて自己結合SQLを直接理解するのであれば、往々にして直観的に
なってしまいますが、しいて言えば
×「e.employee_id = m.employee_id」
自分と同じマネージャの同僚を求めるはずなのに、自分を求めている
×「e.manager_id = m.employee_id」
自分と同じマネージャの同僚を求めるはずなのに、自分のマネージャを求めている
〇「e.manager_id = m.manager_id」
自分と同じマネージャの同僚を求めている(きっとこのあと絞りこむはず)
のような感じで推測していければと思います
投稿ツリー
-
自己結合について
(yamadanbira, 2021-6-14 17:39)
-
Re: 自己結合について
(yokoyama68, 2021-6-14 17:52)
- Re: 自己結合について (yamadanbira, 2021-6-14 17:59)
-
Re: 自己結合について
(yokoyama68, 2021-6-14 20:00)
- Re: 自己結合について (yamadanbira, 2021-6-15 8:54)
-
Re: 自己結合について
(yokoyama68, 2021-6-14 17:52)