+-
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 – 在where子句中使用select语句中的用户定义变量 - 乐贴网