mysql select变量_mysql – 在where子句中使用select语句中的用户定义变量

我有这个选择语句正常工作:

SELECT

pre, dict.char, post, score

, (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre

FROM dict;

它会正确返回所有数据,其中MatchPre的结果位于标有“mpre”的列中.但是,我想只获得mpre>的结果.从逻辑上讲,我试过这个:

SELECT

pre, dict.char, post, score

, (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre

FROM dict

WHERE mpre > 0;

但无济于事.我尝试用“WHERE @res> 0”,“WHERE @ res.mpre> 0”,“WHERE mpre.@ res> 0”等交换“WHERE mpre> 0”,但它要么抛出一个错误或返回一个空的结果集,尽管原始的where-less查询给出了mpre值大于0的行.

这个的正确语法是什么?

解决方法:

SELECT

pre, dict.char, post, score

, (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre

FROM dict

HAVING mpre > 0;

您不能在where子句中使用别名.

您将不得不使用having子句或将带有别名的select放在另一个外部select中.

这是因为当运行where子句时,尚未评估别名.

在所有select,where,group by,from和join之后运行并且不受此限制.

虽然不能使用索引.

如果要使用索引,请使用子选择.

SELECT sub.* FROM

(SELECT

pre, dict.char, post, score

, (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre

FROM dict ) sub

WHERE sub.mpre > 0

标签:mysql

来源: https://codeday.me/bug/20190530/1185819.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值