Odpowiedź brzmi TAK.
IF(cond,expr_true,expr_false) w zapytaniu mysql jest zwarty.
Oto test wykorzystujący @variables do udowodnienia faktu:
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;
Wynik to „5” ze wszystkich trzech zapytań SELECT.
Gdyby funkcja JEŻELI () NIE była zwarta, wynikiem byłoby '5' z SELECT #1, '6' z SELECT #2 i '7' z ostatniej "select @var".
Dzieje się tak, ponieważ wyrażenie „prawda” NIGDY nie jest wykonywane, w przypadku wyboru nr 1, a wyrażenie fałszywe nie jest wykonywane w przypadku wyboru nr 2.
Zauważ, że operator „:=” jest używany do modyfikowania @var w zapytaniu SQL (klauzule select,from i where). Możesz uzyskać z tego naprawdę wymyślny/złożony kod SQL. Użyłem @vars do zastosowania logiki „proceduralnej” w zapytaniu SQL.
-- Jorgenson --