MySQL Self Join
1. MySQL Self Join の概要
自己結合(Self Join)は通常の結合(Join)と同じ仕組みですが、テーブルを自分自身と結合する手法を指します。
2. Self Join の基本構文
SELECT カラム名(s)
FROM テーブル1 T1, テーブル1 T2
WHERE 条件;ここで、T1 と T2 は、同一のテーブルに対して割り当てられた異なるテーブルエイリアスです。これにより、一つのクエリ内で同じテーブルを二つの異なるエンティティとして扱うことができます。
3. デモ用データベース
以下は、「Customers(顧客)」テーブルから抜粋したデータです。
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
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 という条件を加えることで、同じ顧客同士がマッチング(自分自身とのペア)されるのを防いでいます。階層構造のデータ(上司と部下など)を扱う際にも非常に強力な武器になるので、ぜひ覚えておきましょう!