La risposta è SÌ.
L'IF(cond,expr_true,expr_false) all'interno di una query MySQL è in cortocircuito.
Ecco un test, usando @variables per dimostrare il fatto:
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;
Il risultato è "5" da tutte e tre le query SELECT.
Se la funzione IF() NON fosse in cortocircuito, il risultato sarebbe un '5' da SELECT #1 e '6' da SELECT #2 e un '7' dall'ultimo "select @var".
Questo perché l'espressione "vera" non viene MAI eseguita, nella selezione n. 1 e nemmeno l'espressione falsa viene eseguita per la selezione n. 2.
Si noti che l'operatore ':=' viene utilizzato per modificare un @var, all'interno di una query SQL (clausole select,from e where). Puoi ottenere un SQL davvero fantasioso/complesso da questo. Ho usato @vars per applicare la logica "procedurale" all'interno di una query SQL.
-- J Jorgenson --