gpt4 book ai didi

当包装在 `WHERE` 中时,MySQL UDF 仅适用于 `IF` 子句

转载 作者:行者123 更新时间:2023-11-29 09:53:30 25 4
gpt4 key购买 nike

我有一个类似的函数:

create function foo(<args>)
returns varchar(40)
begin
return sha1(concat_ws('-', <args>));
end

当我在像这样的 where 子句中使用它时,我没有得到任何结果:

where fooCol = foo(<args>)

但这非常有效:

where if(fooCol = foo(<args>), true, false)

我对此完全困惑。这一定是我不知道的函数的某些行为,但我一直无法弄清楚为什么会这样。

已更新

这是一个更彻底的示例。使用的所有列均为 varchar(40)

delimiter $$

create function fn($fk varchar(40))
returns varchar(40)
begin
return sha1(concat_ws('-',
-- Real function takes more arguments but I was able
-- to reproduce with a simplified version like this.
coalesce($fk, 'None')
));
end

$$

select
*
from
foo
left join bar on bar.id = foo.bar_id
where
foo.fooKey = fn(bar.barKey)
-- This will return rows!
-- if(foo.fooKey = fn(bar.barKey), true, false);

更新2

仅当 barKey 为 null 时,上述操作才会失败。如果我只是传递 null 而不是使用该字段作为参数,它就可以工作。

最佳答案

我的问题似乎是由这个错误引起的:

https://bugs.mysql.com/bug.php?id=86922

是时候升级MySQL了!

关于当包装在 `WHERE` 中时,MySQL UDF 仅适用于 `IF` 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54335045/

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