我有这个选择语句正常工作:
SELECT
pre, dict.char, post, score
, (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre
FROM dict;
Run Code Online (Sandbox Code Playgroud)
它会正确返回所有数据,其中MatchPre的结果位于标有"mpre"的列中.但是,我想只得到mpre> 0的结果.所以,从逻辑上讲,我试过这个:
SELECT
pre, dict.char, post, score
, (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre
FROM dict
WHERE mpre > 0;
Run Code Online (Sandbox Code Playgroud)
但无济于事.我尝试用"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;
Run Code Online (Sandbox Code Playgroud)
您不能在where子句中使用别名.
您将不得不使用一个having子句或将带有别名的select放在另一个外部select中.
这是因为在where运行子句时,尚未评估别名.
在having运行后,所有的select,where,group by,from和joins是完成,不会受到这个限制.
虽然不能使用索引.
如果要使用索引,请使用子选择.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |