MySQL では、一時変数を WHERE
句で使用できますか?
たとえば、次のクエリでは:
リーリー@var は `id`
の 2 倍の値に正常に設定されましたただし、@var が 10 未満の結果のみを含むように結果セットをフィルター処理しようとすると、次のようになります。 リーリー
それでは結果が出ません。@var の値に基づいて結果をフィルターするにはどうすればよいですか?
P粉7606754522023-10-25 09:10:31
Q: MySQL の一時変数を WHERE 句で使用できますか?
###はい。 MySQL のユーザー定義変数 (@var など) は WHERE 句で参照できます。
クエリでは、WHERE 句の述語は SELECT リストの式より前に評価されます。
つまり、行にアクセスするとき、
@var < 10< 10
はブール式として評価されます。候補行ごとに、この行が次の場合にのみ式が評価されます。結果が TRUE の場合にのみ返されます。
Q: @var の値に基づいて結果をフィルタリングするにはどうすればよいですか?
@var の外側の
他の 式に述語を含めることができます。これらの式は、@var に割り当てられた値から派生できます。
HAVING 句を使用して、返された行をフィルタリングすることができます。 (注:
HAVING 句は、行がアクセスされたときに評価される
WHERE 句とは異なり、結果セットが準備された後に評価されます。)
ただし、厳密に言えば、これらのメソッドは
@var 以外の式に述語を適用しますが、実際に
@var の値をテストするわけではありません。
P粉5305192342023-10-25 00:42:47
エイリアスを割り当てて、HAVING
句でテストする必要があります:
内部結果をある行から次の行に渡すのではなく、単に数式を使用してフィルター処理を行う場合、この変数はまったく必要ないことに注意してください。あなたは書ける: ### リーリー