以前もこのエントリーで学習しましたが、SQLの結合では自己結合という考え方があります。
下記のようなテーブルProductsがあるとします。
name | price
——–+——-
りんご | 100
みかん | 50
バナナ | 80
ここで下記のようなSQLをたたくと
1 |
SELECT P.name , P2.name FROM Products P , Products P2; |
下記のような列が得られます。
name | name
——–+——–
りんご | りんご
りんご | みかん
りんご | バナナ
みかん | りんご
みかん | みかん
みかん | バナナ
バナナ | りんご
バナナ | みかん
バナナ | バナナ
これは3行同士が掛け算されてできた結果でProductsのりんごはProductsの(りんご、みかん、ばなな)と結びついています。※図で書くとわかりやすいかも・・・
ここで例えば下記のようなSQLを書くと
1 |
SELECT P.name , P2.name FROM Products P , Products2 P2 WHERE p.name <> p2.name; |
下記ような結果になります。ちょうどりんご-りんごのような同列グループがなくなったわけです。
name | name
——–+——–
りんご | みかん
りんご | バナナ
みかん | りんご
みかん | バナナ
バナナ | りんご
バナナ | みかん
実務でもこの自己結合は比較的見かけますが、SQLを集合として考えないとなかなか難しいと思います。