skillup

技術ブログ

Database

自己結合に関して

投稿日:

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

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

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

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

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

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

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

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

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

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

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

-Database
-

執筆者:


comment

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

関連記事

no image

slow-query-logについて

データベースを伴う部分でののチューニングですが、大きく分けると SQLを書き直す インデックスを張りなおす プログラム内部でキャッシュを有効化する 設定ファイルの修正 上記のようなかんじになるのではな …

no image

NULLについて

「達人に学ぶSQL徹底指南書」を読み進めていきましたがNULLについていろいろ書いてあるのでメモリます。 Contents1 NULLには未知と適用不能の2パターンがある2 = NULL が使えず I …

no image

joinとeager loading

フレームワークでデータをORMがらみでjoinするときのネタ。 自分の場合はLaravel。他のフレームワークでも考え方は通じるものあるかと・・ Contents1 通常のjoin2 ループの中で取得 …

no image

サブクエリ 移動平均など

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

no image

フィールド以外のプロパティをエンティティに持たせる

JPAでは基本的に1テーブル、1クラスです。 このためプロパティは必然的にテーブルのフィールドに対応しています。 ただ、必ずしもプロパティだけでなく、臨時で持たせておきたい、プロパティがあったりします …