Using a self join/ja

From SQLZoo
Language:Project:Language policy English  • 日本語

エディンバラのバス: 自己結合

テーブルはそれ自体と結合することができます。この場合、テーブルのインスタンスを区別するための仕組みが必要です。FROM句でラベルを導入することができ、ステートメントの他の部分で使用する際には、ラベルと属性名をドットで区切ります。

routeテーブルでの自己結合の例

(num, company)でのrouteテーブルの自己結合

routeテーブルを(num, company)のペアで結合してみます。その結果、同じ路線サービスを共有するすべての停留所のペアのリストが得られま

SELECT * FROM route R1, route R2

  WHERE R1.num=R2.num AND R1.company=R2.company

このテーブルは11,000を超えるエントリーを持つ大きなテーブルです。以下にその一部を示します。LRTの1番サービスだけで121のエントリーがあります。1番の路線には11の停留所があり、これは循環ルートで、最初と最後の停留所は同じです。

num company pos stop num_1 company_1 pos_1 stop_1
1 LRT 1 134 1 LRT 7 217
1 LRT 1 134 1 LRT 11 134
1 LRT 1 134 1 LRT 10 79
...
1 LRT 2 97 1 LRT 7 217
1 LRT 2 97 1 LRT 11 134
...
2 LRT 9 31 2 LRT 11 217
2 LRT 9 31 2 LRT 1 168
...

路線の停留所の自己結合

routeテーブルをstopフィールドで自己結合することができます。その結果、同じ停留所を共有するすべてのサービスのペアのリストが得られます。

SELECT * FROM route R1, route R2

  WHERE R1.stop=R2.stop;

以下の抜粋では、停留所53番「クレイグロックハート」に関するエントリーの一部が示されています。

num company pos stop num_1 company_1 pos_1 stop_1
47 LRT 4 53 47 LRT 4 53
47 LRT 4 53 27 LRT 6 53
47 LRT 4 53 10 LRT 8 53
47 LRT 4 53 45 LRT 7 53
47 LRT 4 53 4 LRT 6 53
10 LRT 8 53 47 LRT 4 53
10 LRT 8 53 27 LRT 6 53
10 LRT 8 53 10 LRT 8 53
...
DataWars, Data Science Practice Projects - LogoDataWars: Practice Data Science/Analysis with +100 Real Life Projects
  • Served by: Dipsy at 2025-07-03T23:33