• ベストアンサー

@変数の使い方

お世話になります。 以下のようなクエリで、変数にNULLが入ります。 何が悪かったのでしょうか、ご教示ください。 SELECT @change := MAX( 購入日 + INTERVAL 2 YEAR ) as 交換日 FROM テーブル WHERE @change > '2012-04-24' お願いします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>何が悪かったのでしょうか、ご教示ください。 これはかなりダメダメですね (1)もともとMySQLはユーザー変数の評価順序は定義されていないため、 表記のような書き方はNGです 「ステートメントの一部でユーザー変数値を割り当てないことおよび同一ステートメント内の他部分で同じ変数を使用しないこと」 という原則があります。 http://dev.mysql.com/doc/refman/5.1-olh/ja/user-variables.html (2)仮に評価が順序立ててされたとしても、SELECT で代入されるのを まってからだとWHEREで条件を絞り込む時点では未設定ですよね ロジック自体が変です (3)GROUP BY をしないSQL文でMAXをとっていますがなんの最大値を とりたいのか意味がわかりません 特定条件の購入日を絞り込みたいという意図があるのはなんとなくわかりますので 命題が明確になれば近しいことはできそうな気がしますが、その場合も サブクエリでの処理になるとおもいます。 (4)MAXのとりかたもせめて購入日のMAXをとって2年たした方がいいですね

hornest
質問者

お礼

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

関連するQ&A