Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Schließt MySQL die IF()-Funktion kurz?

Die Antwort ist JA.
Das IF(cond,expr_true,expr_false) innerhalb einer MySQL-Abfrage ist kurzgeschlossen.

Hier ein Test, der @Variablen verwendet, um die Tatsache zu beweisen:

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;

Das Ergebnis ist '5' aus allen drei SELECT-Abfragen.

Wäre die IF()-Funktion NICHT kurzgeschlossen, wäre das Ergebnis eine '5' von SELECT #1 und eine '6' von SELECT #2 und eine '7' von der letzten "select @var".

Dies liegt daran, dass der „wahre“ Ausdruck NIE in Auswahl Nr. 1 ausgeführt wird und der falsche Ausdruck auch nicht für Auswahl Nr. 2 ausgeführt wird.

Beachten Sie, dass der Operator „:=“ verwendet wird, um eine @var innerhalb einer SQL-Abfrage zu ändern (select-, from- und where-Klauseln). Sie können daraus wirklich ausgefallenes/komplexes SQL erhalten. Ich habe @vars verwendet, um 'prozedurale' Logik innerhalb einer SQL-Abfrage anzuwenden.

-- J. Jorgenson --