同じテーブルを結合する(自己結合)

内部結合や外部結合では通常複数のテーブルを結合しますが、テーブルに対して同じテーブルを結合をすることも可能です。このような結合を自己結合と呼んでいます。ここでは MySQL で自己結合の利用方法について解説します。

(Last modified: )

自己結合の使い方

内部結合や外部結合するときに同じテーブル同士で結合することを自己結合といいます。結合する対象のテーブルが同じテーブルになるだけで基本的な書式は同じなのですが、テーブル名が同じだと取得するカラム名や結合条件を指定できないので、それぞれのテーブルに別名を設定します。

内部結合を例にすると書式は次のようになります。

SELECT t1.col_name1 [, t2.col_name ...]
  FROM table_name AS t1
  INNER JOIN tbl_name AS t2
  ON t1.col_name1 = t2.col_name2;

結合する同じテーブル名に対してそれぞれ t1 と t2 という別名を設定し、取得するデータのカラム名や結合条件を設定しています。

-- --

それでは実際に試してみます。次のようなテーブルを作成しました。

create table staff (id int, name varchar(10), bossid int);

自己結合の使い方(1)

テーブルには次のようなデータを格納してあります。

insert into staff values(1, 'Yamada', 3);
insert into staff values(2, 'Itou', 4);
insert into staff values(3, 'Suzuki', 5);
insert into staff values(4, 'Ueda', 3);
insert into staff values(5, 'Kuroda', 0);

自己結合の使い方(1)

staff テーブルでは識別番号を表す id カラム、名前が格納されている name カラム、そして自分上司の識別番号を格納する bossid の 3 つのカラムがあります。上司も同じ staff テーブルに格納されており、 bossid カラムの値は staff テーブルの他のデータの id カラムの値が格納されています。

bossid の値を参照して上司の名前を結合したデータを取得したい場合、結合先のテーブルも同じ staff テーブルとなります。このような場合に自己結合を使用します。

-- --

それでは左外部結合を行います。 staff テーブルに同じ staff テーブルを結合します。

select * from staff as t1 left join staff as t2 on t1.bossid = t2.id;

自己結合の使い方(1)

同じテーブルで外部結合を行いデータを取得しました。

-- --

テーブルに対して同じテーブルを結合する自己結合の使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。