コマンド道場
INNER JOIN難易度 ★★★☆☆

自分自身とつなぐ

shain テーブルから、社員の氏名と、その上司(joushi_id が指す社員)の氏名を取り出してください。上司がいない社員は含めなくて構いません。列名は社員が name、上司が joushi_name で、列は「name, joushi_name」の順、shain_id の小さい順に並べてください。

主要 7 製品で通用 そのまま使える: PostgreSQL / MySQL / MariaDB / SQLite / SQL Server / Oracle Database / IBM Db2

製品ごとの対応表(実測)を見る

  • 同じ表を 2 回使う場合、別名を必ず付けます。付けないとどちらの列か区別できません。
  • 内部結合なので、相手がいない行(上司のいない社員)は結果に出ません。
● 起動中…

この問題で使えるテーブル(名前をタップすると入力できます)

7

NULL
🔑int不可
text不可
int
データを見る(先頭 5 行)
busho_idbusho_nameparent_busho_id
1経営NULL
2開発1
3営業1
4管理1
5基盤2

18

NULL
🔑int不可
text不可
int
int
numeric(10,0)不可
date不可
date
データを見る(先頭 5 行)
shain_idnamebusho_idjoushi_idsalaryhired_ontaishoku_on
1鈴木1NULL9800002014-04-01NULL
2佐藤217200002016-10-01NULL
3田中225200002019-04-01NULL
4中村225300002020-04-01NULL
5小林224450502024-04-01NULL

解説

結論

同じ表を 2 回使うときは、別名で役割を分けます。

なぜ

「社員」と「上司」はどちらも shain の行です。SQL では同じ表を別名で 2 回書くことで、別々の表のように扱えます。これを自己結合と呼びます。上司・親カテゴリ・返信元の投稿など、同じ種類のものが互いを参照する構造でよく使います。

内部結合なので、上司がいない社員(社長)は結果に出ません。全員を残したいなら外部結合にします。「誰が消えるか」を意識してどちらを使うか決めてください。

よくある間違い

①結合条件の向きを逆にして部下を出してしまう ②別名を付けずに列があいまいになる。

INNER JOIN の使い方をはじめから読む

根拠(一次情報)