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

MySQL SELECT ステートメント内で変数を正しく使用するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-16 14:13:09929ブラウズ

How Can I Correctly Use Variables Within a MySQL SELECT Statement?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。