Отговорът е ДА.
IF(cond,expr_true,expr_false) в mysql заявка е късо съединение.
Ето тест, използващ @variables за доказване на факта:
SET @var:=5;
SELECT IF(1 = 0, (@var:[email protected] + 1), @var ); -- using ':=' operator to modify 'true' expr @var
SELECT IF(1 = 1, @var, (@var:[email protected] + 1) ); -- using ':=' operator to modify 'false' expr @var
SELECT @var;
Резултатът е '5' и от трите SELECT заявки.
Ако функцията IF() НЕ беше на късо съединение, резултатът щеше да бъде '5' от SELECT #1 и '6' от SELECT #2 и '7' от последното "select @var".
Това е така, защото изразът 'true' НИКОГА не се изпълнява в избор №1 и не се изпълнява изразът false за избор №2.
Обърнете внимание, че операторът ':=' се използва за модифициране на @var в рамките на SQL заявка (клаузи select,from и where). Можете да получите наистина изискан/сложен SQL от това. Използвах @vars за прилагане на „процедурна“ логика в SQL заявка.
-- Дж. Йоргенсън --