ホームページ >データベース >mysql チュートリアル >MySQL の select ステートメントは、単一ステートメント内でユーザー変数を確実に使用および再定義できますか?

MySQL の select ステートメントは、単一ステートメント内でユーザー変数を確実に使用および再定義できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-03 10:41:17143ブラウズ

Can MySQL's Select Statement Reliably Use and Redefine User Variables Within a Single Statement?

Select ステートメント内での変数の定義と使用

MySQL では、通常、ユーザー変数に値を代入してそれらの値を読み取ることはお勧めできません。同じステートメント内で。特定のシナリオでは機能するように見えますが、この動作は保証されておらず、特定のステートメントの要素と MySQL サーバーのバージョンによって異なる場合があります。

たとえば、次のステートメントを考えてみましょう:

SELECT 
    @z:=SUM(item),
    2*@z
FROM
    TableA;

この場合、期待される結果は、2 番目の列が 2 に item 列の合計を乗算した値を返すことになります。ただし、MySQL はステートメントを異なる順序で評価し、2 番目の列に NULL 値が返される場合があります。

この動作の背後にある理由は、MySQL がユーザー変数に関係する式の評価順序を保証していないためです。 GROUP BY 句を導入するなど、ステートメントを少し変更すると、評価順序が変わる可能性があります。

ただし、サブクエリを使用して目的の機能を実現する回避策があります。

select @z, @z*2
from (SELECT @z:=sum(item)
      FROM TableA
     ) t;

このサブクエリでは、変数 @z に項目列の合計が割り当てられ、その 2 倍の値とともに選択されます。このアプローチにより、変数の値が正しく評価され、2 番目の列で使用されることが保証されます。

以上がMySQL の select ステートメントは、単一ステートメント内でユーザー変数を確実に使用および再定義できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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