Select ステートメント内での変数の定義と使用
SQL では、通常、ユーザー変数に値を割り当てることは推奨されません。同じ select ステートメント内で使用してください。 MySQL のドキュメントには、このような式の評価順序は未定義であり、ステートメント要素やサーバーのリリースによって異なる可能性があると明示的に記載されています。
この点を説明するために、次のクエリを考えてみましょう。
SELECT @z:=SUM(item), 2*@z FROM TableA;
このクエリでは、2 番目の列が @z に 2 を乗算した値を返すことが期待されます。ただし、評価順序は保証されていないため、MySQL は NULL を返す場合があります。この動作は、次に示すように、ユーザー変数の代わりにストアド プロシージャを使用する場合とは異なります。
SELECT @z:=someProcedure(item), 2*@z FROM TableA;
この場合、ストアド プロシージャの呼び出しは変数の代入の前に評価されるため、期待どおりの結果が得られます。
この問題を解決し、select ステートメント内で変数を定義するには、サブクエリを使用できます。
select @z, @z*2 from (SELECT @z:=sum(item) FROM TableA ) t;
このアプローチにより、変数の代入が確実に行われます。外側のクエリで使用される前に。
以上がSQL SELECT ステートメント内で変数を安全に定義して使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。