Ответ ДА.
IF (cond, expr_true, expr_false) в запросе mysql закорочен.
Вот тест, использующий @variables для доказательства факта:
SET @var:=5;
SELECT IF(1 = 0, (@var:=@var + 1), @var ); -- using ':=' operator to modify 'true' expr @var
SELECT IF(1 = 1, @var, (@var:=@var + 1) ); -- using ':=' operator to modify 'false' expr @var
SELECT @var;
Результат - 5 из всех трех запросов SELECT.
Если бы функция IF () НЕ была замкнута, результатом было бы '5' из SELECT # 1, '6' из SELECT # 2 и '7' из последнего "select @var".
Это связано с тем, что выражение 'true' НИКОГДА не выполняется, в select # 1 и ложное выражение не выполняется для select # 2.
Обратите внимание, что оператор ': =' используется для изменения @var в запросе SQL (предложения select, from и where). Из этого вы можете получить действительно причудливый / сложный SQL. Я использовал @vars для применения «процедурной» логики в запросе SQL.
- Дж. Йоргенсон -