答えは「はい」です。
mysqlクエリ内のIF(cond、expr_true、expr_false)が短絡しています。
ここでは、@変数を使用して事実を証明するテストを行います:
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;
結果は、3つのSELECTクエリすべてから「5」になります。
IF()関数が短絡されていなかった場合、結果はSELECT#1から「5」、SELECT#2から「6」、最後の「select@var」から「7」になります。
これは、「true」式がselect#1で実行されることはなく、false式がselect#2で実行されないためです。
':='演算子は、SQLクエリ(select、from、およびwhere句)内で@varを変更するために使用されることに注意してください。これから、本当に凝った/複雑なSQLを取得できます。 @varsを使用して、SQLクエリ内に「手続き型」ロジックを適用しました。
--J Jorgenson-