• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つのSQL文で結果に差違が発生する)

2つのSQL文で結果に差違が発生する

このQ&Aのポイント
  • 2つのSQL文を実行させた場合、結果に差違が発生しますか?
  • SQL文Aでは抽出条件が正しく実行されず、全レコードの総価格が計算されます。
  • SQL文Bでは抽出条件が正しく実行され、目的の値が返されます。

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

  • ベストアンサー
  • yossy_kt
  • ベストアンサー率50% (103/203)
回答No.2

AとBとでは、SQLの目的が異なるように見えます。 Bは2015/11に発売されたアイテムの定価をカテゴリーごとに合算したもの、 Bは2015/11に発売されたアイテムの売上をカテゴリーごとに合算したものに見えます。 例えば、あるアイテムに対してorderテーブル内に5つのレコードがあった場合、Aではそのアイテムに対する価格が5回加算されますが、Bでは1回しか加算されません。 従って、AとBでは結果が異なると思います。

ok-rjak
質問者

お礼

遅くなって申し訳ありません。 よく見ると確かにSQLの意味が違いますね。 すみませんでした。

その他の回答 (3)

  • yassan4
  • ベストアンサー率23% (3/13)
回答No.4

>以下の2つのSQL文を実行させた場合、「total_price」の値に違いは発生しますか? ⇒発生します。特にorderテーブルにレコードがあるかどうかで。 >こちらで上記と同じようなSQL文を実行すると、Bで出てほしい値がAでは出てこないのです。 ⇒意味がよくわからないのですが、、出てほしい値はBで出ているんですかね?その上でAには出てこないという意味でしょうか。  そういう意味ならorderテーブルにINNER JOINしてる分Aのほうが抽出条件が厳しいので  やっぱり出てこない値のitems.idの値がorderテーブルに含まれていないんじゃないかと推測します。 >Aの場合は「WHERE DATE_FORMAT(`items`.`date`, '%Y%m') = 201511」が抽出条件として実行されていないような感じです。 >すべてのレコードの「SUM(`items`.`price` * `items`.`max_num`) AS `total_price`」が計算されています。 >Bだけで実行すればちゃんとほしい値が返ってきます。 ⇒値が違う理由は上記だと思うので ここは無視しします。 何か間違っていますか? ⇒2つのSQL文が間違っているかどうかは、そのSQLで何が出したいのか  言葉にして頂けるとはっきり答えれるのですが、そうでないと  何とも言えません。   回答が中途半端になり、申し訳ないですが 進捗があることを切に願います。

回答No.3

> Aの場合は「WHERE DATE_FORMAT(`items`.`date`, '%Y%m') = 201511」が抽出条件として実行されていないような感じです。 その予想が正しいかどうかは簡単に検証できます。 AのWHERE句を削除した形で、同じ結果が得られるか確認すればいいのです。 私の予想では、異なる結果が得られるのではないかと思います。 両方のSQLを、結合条件と抽出条件はそのままにSELECT * とし、GROUP BYを削除して、抽出されているレコードを比べてみましょう。違いがあるはずです。 私の予想では、orderテーブルのitem_idが一意でないのではないかと思います。

noname#212058
noname#212058
回答No.1

単純に A で order テーブルを内部結合 ( INNER JOIN ) しているからではないですかね? これを外部結合 ( LEFT JOIN ) に変えたらどうなりますか?

関連するQ&A