利用規約の変更について

お世話になります。

以下のようなクエリで、変数にNULLが入ります。
何が悪かったのでしょうか、ご教示ください。

SELECT @change := MAX( 購入日 + INTERVAL 2 YEAR ) as 交換日
FROM テーブル
WHERE @change > '2012-04-24'

お願いします。

A 回答 (1件)

>何が悪かったのでしょうか、ご教示ください。



これはかなりダメダメですね

(1)もともとMySQLはユーザー変数の評価順序は定義されていないため、
表記のような書き方はNGです

「ステートメントの一部でユーザー変数値を割り当てないことおよび同一ステートメント内の他部分で同じ変数を使用しないこと」
という原則があります。

http://dev.mysql.com/doc/refman/5.1-olh/ja/user- …

(2)仮に評価が順序立ててされたとしても、SELECT で代入されるのを
まってからだとWHEREで条件を絞り込む時点では未設定ですよね
ロジック自体が変です

(3)GROUP BY をしないSQL文でMAXをとっていますがなんの最大値を
とりたいのか意味がわかりません
特定条件の購入日を絞り込みたいという意図があるのはなんとなくわかりますので
命題が明確になれば近しいことはできそうな気がしますが、その場合も
サブクエリでの処理になるとおもいます。

(4)MAXのとりかたもせめて購入日のMAXをとって2年たした方がいいですね
    • good
    • 0
この回答へのお礼

ありがとうございます、勉強になりました!
MAXはごめんなさい、本当は結合しているのですが簡素化するために書き換えた時の残りです;
ありがとうございました^^

お礼日時:2012/05/25 12:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


人気Q&Aランキング