ホームページ  >  に質問  >  本文

MySQL の一時変数を WHERE 句で使用できますか?

MySQL では、一時変数を WHERE 句で使用できますか?

たとえば、次のクエリでは:

リーリー

@var は `id`

の 2 倍の値に正常に設定されました

ただし、@var が 10 未満の結果のみを含むように結果セットをフィルター処理しようとすると、次のようになります。 リーリー

それでは結果が出ません。

@var の値に基づいて結果をフィルターするにはどうすればよいですか?

P粉798343415P粉798343415361日前560

全員に返信(2)返信します

  • P粉760675452

    P粉7606754522023-10-25 09:10:31

    Q: MySQL の一時変数を WHERE 句で使用できますか?

    ###はい。 MySQL のユーザー定義変数 (

    @var など) は WHERE 句で参照できます。

    ユーザー定義変数は、式の評価時に現在割り当てられている値への参照です。

    クエリでは、WHERE 句の述語は SELECT リストの式より前に評価されます。

    つまり、行にアクセスするとき、

    @var < 10< 10 はブール式として評価されます。候補行ごとに、この行が次の場合にのみ式が評価されます。結果が TRUE の場合にのみ返されます。

    この変数に 10 以上の値を指定すると、ステートメントが実行される前にすべての行が返されます。

    Q: @var の値に基づいて結果をフィルタリングするにはどうすればよいですか?

    本当に無理です。 (実際、これが元のクエリの実行内容です。)

    @var の外側の 他の 式に述語を含めることができます。これらの式は、@var に割り当てられた値から派生できます。

    オプションとして、SELECT リスト内の式を返し、

    HAVING 句を使用して、返された行をフィルタリングすることができます。 (注: HAVING 句は、行がアクセスされたときに評価される WHERE 句とは異なり、結果セットが準備された後に評価されます。)

    別のオプションは、インライン ビューを使用して結果セットを準備することです。その後、外部クエリで返された式に対して WHERE 句を使用できます。

    ただし、厳密に言えば、これらのメソッドは

    @var 以外の式に述語を適用しますが、実際に @var の値をテストするわけではありません。

    返事
    0
  • P粉530519234

    P粉5305192342023-10-25 00:42:47

    エイリアスを割り当てて、HAVING 句でテストする必要があります:

    リーリー

    内部結果をある行から次の行に渡すのではなく、単に数式を使用してフィルター処理を行う場合、この変数はまったく必要ないことに注意してください。あなたは書ける: ### リーリー

    返事
    0
  • キャンセル返事