MySQL では、一時変数を WHERE 句で使用できますか?
WHERE
たとえば、次のクエリでは:
@var は `id`
ただし、@var が 10 未満の結果のみを含むように結果セットをフィルター処理しようとすると、次のようになります。 リーリー
Q: MySQL の一時変数を WHERE 句で使用できますか?
@var など) は WHERE 句で参照できます。
など) は WHERE 句で参照できます。
@var はブール式として評価されます。候補行ごとに、この行が次の場合にのみ式が評価されます。結果が TRUE の場合にのみ返されます。
Q: @var の値に基づいて結果をフィルタリングするにはどうすればよいですか?
の値に基づいて結果をフィルタリングするにはどうすればよいですか?
@var の外側の 他の 式に述語を含めることができます。これらの式は、@var に割り当てられた値から派生できます。
の外側の
に割り当てられた値から派生できます。
HAVING 句を使用して、返された行をフィルタリングすることができます。 (注: HAVING 句は、行がアクセスされたときに評価される WHERE 句とは異なり、結果セットが準備された後に評価されます。)
句を使用して、返された行をフィルタリングすることができます。 (注:
句は、行がアクセスされたときに評価される
句とは異なり、結果セットが準備された後に評価されます。)
@var 以外の式に述語を適用しますが、実際に @var の値をテストするわけではありません。
以外の式に述語を適用しますが、実際に
の値をテストするわけではありません。
エイリアスを割り当てて、HAVING 句でテストする必要があります:
HAVING
内部結果をある行から次の行に渡すのではなく、単に数式を使用してフィルター処理を行う場合、この変数はまったく必要ないことに注意してください。あなたは書ける: ### リーリー
Q: MySQL の一時変数を WHERE 句で使用できますか?
###はい。 MySQL のユーザー定義変数 (@var
ユーザー定義変数は、式の評価時に現在割り当てられている値への参照です。など) は WHERE 句で参照できます。
@var はブール式として評価されます。候補行ごとに、この行が次の場合にのみ式が評価されます。結果が TRUE の場合にのみ返されます。
この変数に 10 以上の値を指定すると、ステートメントが実行される前にすべての行が返されます。Q: @var
本当に無理です。 (実際、これが元のクエリの実行内容です。)の値に基づいて結果をフィルタリングするにはどうすればよいですか?
@var
オプションとして、SELECT リスト内の式を返し、の外側の
他の 式に述語を含めることができます。これらの式は、@varに割り当てられた値から派生できます。
HAVING
別のオプションは、インライン ビューを使用して結果セットを準備することです。その後、外部クエリで返された式に対して WHERE 句を使用できます。句を使用して、返された行をフィルタリングすることができます。 (注:
HAVING句は、行がアクセスされたときに評価される
WHERE句とは異なり、結果セットが準備された後に評価されます。)
@var
以外の式に述語を適用しますが、実際に
@varの値をテストするわけではありません。
エイリアスを割り当てて、
リーリーHAVING
句でテストする必要があります:内部結果をある行から次の行に渡すのではなく、単に数式を使用してフィルター処理を行う場合、この変数はまったく必要ないことに注意してください。あなたは書ける: ### リーリー