То, что вы пытаетесь, лучше всего сделать, используя COALESCE(value,...)
Возвращает первое ненулевое значение в списке или NULL, если нет
ненулевые значения.
Так было бы:
SELECT
Account.id,
COALESCE(
**Should send message query**,
**Should check inbox**
) as nextTask
FROM Account
Теперь к вашему актуальному вопросу
Я хочу знать, будет ли MySQL вычислять значения для следующих [IFNULL]
выражение, если первое выполнено.
У двигателя нет причин для этого. Вы можете проверить это с помощью следующего скрипта:
set @executed1 = 'no';
set @executed2 = 'no';
select coalesce(
@executed1 := 'yes', -- evaluates to non null
@executed2 := 'yes'
);
select @executed1, @executed2;
Результат:
@executed1 | @executed2
yes | no
Как видите, второе выражение не выполняется, так как первое выражение было оценено как ненулевое значение.
set @executed1 = 'no';
set @executed2 = 'no';
select coalesce(
nullif(@executed1 := 'yes', 'yes'), -- evaluates to null
@executed2 := 'yes'
);
select @executed1, @executed2;
Результат:
@executed1 | @executed2
yes | yes
Здесь оба выражения были выполнены, потому что первое было оценено как NULL.
дб-скрипка
Я бы сказал - То же самое верно для IFNULL
. Но я бы не стал этим пользоваться. По крайней мере, не в вашем случае.