sql >> Base de Datos >  >> RDS >> Mysql

¿MySQL cortocircuita la función IF()?

La respuesta es SÍ.
El IF(cond,expr_true,expr_false) dentro de una consulta mysql está cortocircuitado.

Aquí una prueba, usando @variables para probar el hecho:

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;

El resultado es '5' de las tres consultas SELECT.

Si la función IF() NO tuviera un cortocircuito, el resultado sería un '5' de SELECT #1, y '6' de SELECT #2, y un '7' del último "select @var".

Esto se debe a que la expresión 'verdadera' NUNCA se ejecuta en la selección n.º 1 y tampoco se ejecuta la expresión falsa en la selección n.º 2.

Tenga en cuenta que el operador ':=' se usa para modificar un @var, dentro de una consulta SQL (cláusulas select, from y where). Puede obtener un SQL realmente elegante/complejo a partir de esto. He usado @vars para aplicar la lógica de 'procedimiento' dentro de una consulta SQL.

-- J. Jorgenson --