ホームページ > データベース > mysql チュートリアル > SQL SELECT ステートメント内で変数を安全に定義して使用するにはどうすればよいですか?

SQL SELECT ステートメント内で変数を安全に定義して使用するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-02 03:56:12
オリジナル
380 人が閲覧しました

How Can I Safely Define and Use a Variable Within a SQL SELECT Statement?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート