• ベストアンサー

デカルト積の有用性

SELECT文の条件不足などによって起こる デカルト積(直積)はどんなときに使うのでしょうか? 使い道がまったくわかりません… 素人考えでは、関連カラムを暗黙的に条件に加え 記述をシンプルにしてほしいと思ってしまいます。 しかしそうはならない理由があるのかと思います。 タブン何かのときに使うのかなと。 デカルト積(直積)はどんなときに使うのか? 現実問題として使う場面があるか(どんなときか) これについて教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

直積は通常2つの関係ない値の全ての組み合わせを取得するために実務でも使うことがあります。 たとえば、マスタにある全ての国・商品別の売上一覧を表示したい。 (売上の有無にかかわらず) SELECT x.COUNTRY,x.PRODUCT,SUM(t.AMOUNT) FROM (SELECT c.COUNTRY, p.PRODUCT FROM COUNTRYTBL c, PRODUCTTBL p) x LEFT OUTER JOIN URIAGETBL t ON t.COUNTRY=x.COUNTRY AND t.PRODUCT=x.PRODUCT 上記以外でも、収束計算を行う処理を書くときには重宝します(内部収益率とか)。 計算結果が指定値になるような利率を求めたりする場合、小数第一位、小数第二位、、という風に 徐々に利率の精度を細かくして最適な値を求めるようにしますが、ここで0から9までの10レコード が収録されているテーブルを使って直積を利用すると、その桁の計算が1回で済んでしまうため、 小数第10位まで求めるのに10回クエリを実行するだけで済みます。 以上、参考になれば。

pringlez
質問者

お礼

国と製品を考える場合、私だったらその国で扱っている製品だけを出す 状況を考えてしまいます。だから結合条件が必要だと。 でも、一覧表を出力することを考えたら、空白になることもありえます。 そういう感覚で使えばいいのかなと解釈しました。 正直まだもやっとしていますが、なんとなくわかりました。 ありがとうございました。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

#1です。本題と関係ないところで混乱させるのは本意ではないので、 以下の通りクエリを訂正しておきます。失礼しました。 SELECT x.COUNTRY,x.PRODUCT,SUM(t.AMOUNT) FROM (SELECT c.COUNTRY, p.PRODUCT FROM COUNTRYTBL c, PRODUCTTBL p) x LEFT OUTER JOIN URIAGETBL t ON t.COUNTRY=x.COUNTRY AND t.PRODUCT=x.PRODUCT GROUP BY x.COUNTRY,x.PRODUCT

pringlez
質問者

お礼

ありがとうございました。

関連するQ&A