Svaret är JA.
OM(cond,expr_true,expr_false) i en mysql-fråga är kortsluten.
Här ett test som använder @variables för att bevisa faktum:
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;
Resultatet är '5' från alla tre SELECT-frågor.
Hade IF()-funktionen INTE kortslutits, skulle resultatet bli en '5' från SELECT #1, och '6' från SELECT #2, och en '7' från den sista "select @var".
Detta beror på att uttrycket "true" ALDRIG exekveras, i välj #1 och inte heller det falska uttrycket exekveras för valt #2.
Observera att operatorn ':=' används för att modifiera en @var i en SQL-fråga (select, from och where-satser). Du kan få lite riktigt snygg/komplex SQL från detta. Jag har använt @vars för att tillämpa 'procedurlogik' i en SQL-fråga.
-- J Jörgenson --