1. ホーム
  2. sql

[解決済み] クロスジョインの用途は?

2022-10-29 04:16:38

質問

クロスジョインは2つのセットのタプルに対してデカルト積を実行します。

SELECT *
FROM Table1
CROSS JOIN Table2

このようなSQL操作が特に有用なのはどのような状況でしょうか?

どのように解決するのですか?

特定の衣服のサイズや色の情報のように、完全に入力したいグリッドがある場合。

select 
    size,
    color
from
    sizes CROSS JOIN colors

1日のうち1分ごとの行を含むテーブルが欲しい、それを使って1分ごとにプロシージャが実行されたことを確認したい、だから3つのテーブルを掛け合わせるかもしれません。

select
    hour,
    minute
from
    hours CROSS JOIN minutes

あるいは、1 年間のすべての月に適用したい標準的なレポート仕様のセットがあるとします。

select
    specId,
    month
from
    reports CROSS JOIN months

これらをビューとして維持することの問題点は、ほとんどの場合、特に服に関しては完全な製品を望んでいないことです。このような場合は MINUS ロジックをクエリに追加して、取り扱わない特定の組み合わせを削除することはできますが、デカルト積を使用せず、他の方法でテーブルに入力する方が簡単だと思うかもしれません。

また、思ったより行数が多いテーブルでクロスジョインを試すことになるかもしれません。 WHERE 節が部分的または完全に欠落している可能性があります。このような場合、DBAはすぐにその欠落をあなたに通知するでしょう。通常、DBA は満足しないでしょう。