我有一个类似的功能:
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
而不是使用字段作为参数,那么它将起作用。