MySQL の一時変数を WHERE 句で使用できますか?
P粉798343415
P粉798343415 2023-10-24 10:37:42
0
2
585

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

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

リーリー

@var は `id`

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

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

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

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

P粉798343415
P粉798343415

全員に返信(2)
P粉760675452

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

いいねを押す +0
P粉530519234

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

リーリー

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート