MySQL 速習チュートリアル

MySQL Self Join

1. MySQL Self Join の概要

自己結合(Self Join)は通常の結合(Join)と同じ仕組みですが、テーブルを自分自身と結合する手法を指します。

2. Self Join の基本構文

SELECT カラム名(s)
FROM テーブル1 T1, テーブル1 T2
WHERE 条件;

ここで、T1T2 は、同一のテーブルに対して割り当てられた異なるテーブルエイリアスです。これにより、一つのクエリ内で同じテーブルを二つの異なるエンティティとして扱うことができます。

3. デモ用データベース

以下は、「Customers(顧客)」テーブルから抜粋したデータです。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico

4. MySQL Self Join の具体例

次の SQL は、同じ都市(City)に拠点を置く顧客同士をマッチングさせます。

-- 同じ都市に住む異なる顧客のペアを抽出します
SELECT A.CustomerName AS 顧客名1, B.CustomerName AS 顧客名2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;

このクエリでは、A.CustomerID <> B.CustomerID という条件を加えることで、同じ顧客同士がマッチング(自分自身とのペア)されるのを防いでいます。階層構造のデータ(上司と部下など)を扱う際にも非常に強力な武器になるので、ぜひ覚えておきましょう!