Câu trả lời là CÓ.
IF (cond, expr_true, expr_false) trong một truy vấn mysql bị đoản mạch.
Đây là một bài kiểm tra, sử dụng @variables để chứng minh thực tế:
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;
Kết quả là '5' từ cả ba truy vấn SELECT.
Nếu hàm IF () KHÔNG bị đoản mạch, kết quả sẽ là '5' từ SELECT # 1 và '6' từ SELECT # 2 và '7' từ "select @var" cuối cùng.
Điều này là do biểu thức 'true' KHÔNG BAO GIỜ được thực thi trong lựa chọn số 1 và biểu thức sai cũng không được thực thi đối với lựa chọn số 2.
Lưu ý rằng toán tử ':=' được sử dụng để sửa đổi @var, trong một truy vấn SQL (mệnh đề select, from và where). Bạn có thể nhận được một số SQL thực sự phức tạp / phức tạp từ điều này. Tôi đã sử dụng @vars để áp dụng logic 'thủ tục' trong một truy vấn SQL.
- J Jorgenson -