SELECT 内で変数を定義して同じステートメント内で使用できますか?
同じ SELECT ステートメントがよく質問されます。次の例を考えてみましょう:
SELECT @z:=SUM(item), 2*@z FROM TableA;
このようなシナリオでは、2 番目の列は常に NULL を返します。これは、ストアド プロシージャを使用した同様の操作が期待どおりに機能するため、独特です。
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
説明
MySQL ドキュメントには、ユーザー変数に値を割り当てると明示的に記載されています。同じステートメント内でそれを読み取ることは信頼できません。ユーザー変数の評価順序は未定義で、ステートメント要素と MySQL Server のバージョンによって異なる場合があります。したがって、期待される結果は保証できません。
解決策
望ましい結果を達成するには、サブクエリを使用できます。
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
以上が単一の MySQL SELECT ステートメントでユーザー定義変数を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。