У меня есть такая функция:
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
вместо использования поля в качестве аргумента, это сработает.