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 --