SELECT ステートメント内での変数の使用
MySQL を使用する場合、同じ SELECT 内で変数を定義して使用するシナリオが発生する場合があります。声明。ただし、関連する制限に注意することが重要です。
変数の割り当てと可読性
MySQL ドキュメントによると、通常、変数に値を割り当てることは推奨されません。ユーザー変数を使用して、同じステートメント内でそれを読み取ります。ユーザー変数を含む式の評価順序は未定義で、ステートメントの要素によって異なる場合があります。
これは、次のクエリが期待どおりに動作しない可能性があることを意味します:
SELECT @z:=SUM(item), 2*@z FROM TableA;
この場合の場合、2 番目の列には NULL が返される可能性があります。
との違いはなぜですか?プロシージャ?
ユーザー変数の代わりにストアド プロシージャを使用する次のクエリが、なぜ期待どおりに動作するのか疑問に思われるかもしれません:
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
この理由は、ストアド プロシージャがプロシージャはユーザー変数とは異なる方法で評価されます。ストアド プロシージャの評価順序は定義されており、一貫しています。
サブクエリの使用
必要な機能を実現するには、サブクエリを使用できます。
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
このアプローチでは、サブクエリを使用してユーザー変数 (@z) を初期化し、それをメインで参照します。クエリ。
以上がMySQL SELECT ステートメント内で変数を正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。