gpt4 book ai didi

mysql - 在其 where 子句中使用来自 select 语句的用户定义变量

转载 作者:可可西里 更新时间:2023-11-01 07:28:55 25 4
gpt4 key购买 nike

我有这个 select 语句工作正常:

SELECT 
pre, dict.char, post, score
, (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre
FROM dict;

它正确地返回所有数据,MatchPre 的结果在标记为“mpre”的列中。但是,我只想获得 mpre > 0 的结果。所以,从逻辑上讲,我试过这个:

SELECT 
pre, dict.char, post, score
, (SELECT @res := MatchPre(pre, 'test') AS var) AS mpre
FROM dict
WHERE mpre > 0;

但是没有用。我试过将“WHERE mpre > 0”与“WHERE @res > 0”、“WHERE @res.mpre > 0”、“WHERE mpre.@res > 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 子句或将带有别名的选择放在另一个外部选择中。

这是因为当 where 子句运行时,别名还没有被评估。
having 所有selectwheregroup byfromjoins 已完成,不受此限制。
但是不能使用索引。
如果要使用索引,请使用子选择。

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 语句的用户定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7894741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com