同じテーブルを対象に結合する(自己結合)
【開発環境】
OS:Win10(64ビット)
データベース:SQLite3
コマンドプロンプト入力
【自己結合】
内部結合や外部結合では通常複数のテーブルを結合しますが、自分自身のテーブルと結合をすることも可能です。このような結合を自己結合と呼んでいます。
・外部結合の書式
SELECT 別名1.カラム名, ...
FROM テーブル名 別名1 LEFT OUTER JOIN テーブル名 別名2
ON 別名1.カラム名 = 別名2.カラム名;
実践
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables
color earn kantou product user
dept foods olduser test user1
sqlite> create table staff(id integer, name text, bossid integer);
sqlite> insert into staff values(1, 'Yamada', 3);
sqlite> insert into staff values(2, 'Itou', 4);
sqlite> insert into staff values(3, 'Suzuki', 5);
sqlite> insert into staff values(4, 'Ueda', 3);
sqlite> insert into staff values(5, 'Kuroda', 0);
sqlite> .header on
sqlite> .mode column
sqlite> select person.id, person.name, boss.name from staff person
...> left outer join staff boss
...> on person.bossid = boss.id;
id name name
---------- ---------- ----------
1 Yamada Suzuki
2 Itou Ueda
3 Suzuki Kuroda
4 Ueda Suzuki
5 Kuroda
sqlite>
赤い所はテーブルが存在してない
・内部結合の書式
SELECT 別名1.カラム名, ...
FROM テーブル名 別名1 INNER JOIN テーブル名 別名2
ON 別名1.カラム名 = 別名2.カラム名;
実践
sqlite> select person.id, person.name, boss.name from staff person
...> INNER join staff boss
...> on person.bossid = boss.id;
id name name
---------- ---------- ----------
1 Yamada Suzuki
2 Itou Ueda
3 Suzuki Kuroda
4 Ueda Suzuki
sqlite>
※コメント投稿者のブログIDはブログ作成者のみに通知されます