Odpověď je ANO.
IF(cond,expr_true,expr_false) v dotazu mysql je zkratovaný.
Zde je test, pomocí @proměnných k prokázání skutečnosti:
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;
Výsledek je '5' ze všech tří SELECT dotazů.
Pokud by funkce IF() NEZkratovala, výsledkem by bylo '5' z SELECT #1 a '6' z SELECT #2 a '7' z posledního "select @var".
Je to proto, že výraz 'true' není NIKDY proveden ve výběru #1 a ani nepravdivý výraz pro výběr #2.
Všimněte si, že operátor ':=' se používá k úpravě @var v rámci dotazu SQL (klauzule select,from a where). Z toho můžete získat opravdu luxusní/složité SQL. Použil jsem @vars k použití „procedurální“ logiky v rámci dotazu SQL.
-- J Jorgenson --