skillup

技術ブログ

Database

自己結合に関して

投稿日:

以前もこのエントリーで学習しましたが、SQLの結合では自己結合という考え方があります。

下記のようなテーブルProductsがあるとします。

name | price
——–+——-
りんご | 100
みかん | 50
バナナ | 80

ここで下記のようなSQLをたたくと

下記のような列が得られます。

name | name
——–+——–
りんご | りんご
りんご | みかん
りんご | バナナ
みかん | りんご
みかん | みかん
みかん | バナナ
バナナ | りんご
バナナ | みかん
バナナ | バナナ

これは3行同士が掛け算されてできた結果でProductsのりんごはProductsの(りんご、みかん、ばなな)と結びついています。※図で書くとわかりやすいかも・・・

ここで例えば下記のようなSQLを書くと

下記ような結果になります。ちょうどりんご-りんごのような同列グループがなくなったわけです。

name | name
——–+——–
りんご | みかん
りんご | バナナ
みかん | りんご
みかん | バナナ
バナナ | りんご
バナナ | みかん

実務でもこの自己結合は比較的見かけますが、SQLを集合として考えないとなかなか難しいと思います。

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

外部結合について 行列変換

今回から外部結合について学習します。 これはCASE式でもやった集合の考え方が大事になってきます。 例えば下記のようなテーブルCoursesとがあるとします。 name | course &#8212 …

no image

サブクエリ 移動平均など

前回の応用編です。 日付、入出金、残高はできましたが、ここからさらに、現在のレコードから3行以内(3行あれば3行、なければそれ以内でできるだけ)のレコードの合計値を出す計算を考えます。 結果だけ先に書 …

no image

sql_modeに関して

開発では動いていたのに本番ではint型のカラムで空白が入らない!みたいなエラーが出て、データベースにデータが入らないことが発覚し、調査をすることに・・・ sql_modeが原因でした・・・ sql_m …

no image

外部結合 応用編2

引き続き結合についてです。 Contents1 1対Nの結合に関して2 完全外部結合3 差集合(class_aだけに存在するものとclass_bだけに存在するもの)3.1 class_aのみ3.2 c …

no image

第二、第三の正規化&ER図&Check制約

前回第一正規化を話したので、第二、第三に進んでいきます。 Contents1 第二正規化とは?2 第三正規化とは?3 正規化のメリット4 ER図5 本日のSQLネタ Check制約 第二正規化とは? …

アーカイブ