Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Toán tử ternary trong MySQL (như C/C++ ? : )

MySQL không có toán tử ternary ? : như C/C++, nhưng đạt được kết quả tương tự bằng CASE WHEN ... THEN ... ELSE ... END.

So sánh C vs MySQL

C/C++ ternary

int result = (X > 1 && (X-Y) < 0) ? X : (X-Y);

MySQL CASE WHEN

SELECT CASE 
           WHEN tbl.X > 1 AND (tbl.X - tbl.Y) < 0 THEN 0 
           ELSE (tbl.X - tbl.Y) 
       END AS Result
FROM TernaryOperationDemo tbl;

Ví dụ minh họa

Tạo bảng và chèn dữ liệu:

mysql> CREATE TABLE TernaryOperationDemo (X INT, Y INT);

mysql> INSERT INTO TernaryOperationDemo VALUES(10, 5);
mysql> INSERT INTO TernaryOperationDemo VALUES(5, 15);
mysql> INSERT INTO TernaryOperationDemo VALUES(20, 15);
mysql> INSERT INTO TernaryOperationDemo VALUES(15, 25);
mysql> INSERT INTO TernaryOperationDemo VALUES(10, -11);

Dữ liệu:

+------+------+
| X    | Y    |
+------+------+
|   10 |    5 |
|    5 |   15 |
|   20 |   15 |
|   15 |   25 |
|   10 |  -11 |
+------+------+

Áp dụng logic ternary:

mysql> SELECT CASE 
    -> WHEN tbl.X > 1 AND (tbl.X - tbl.Y) < 0 THEN 0 
    -> ELSE (tbl.X - tbl.Y) 
    -> END AS Result 
    -> FROM TernaryOperationDemo tbl;

Kết quả:

+--------+
| Result |
+--------+
|      5 |
|      0 |
|      5 |
|      0 |
|     21 |
+--------+

Các dạng CASE trong MySQL

Simple CASE (so sánh giá trị)

CASE cot 
    WHEN gia_tri_1 THEN ket_qua_1
    WHEN gia_tri_2 THEN ket_qua_2
    ELSE ket_qua_mac_dinh
END

Searched CASE (điều kiện phức tạp) - dùng cho ternary

CASE 
    WHEN dieu_kien_1 THEN ket_qua_1
    WHEN dieu_kien_2 THEN ket_qua_2
    ELSE ket_qua_mac_dinh
END

MySQL 8.0: Hàm IF() và IFNULL()

  • IF(dieu_kien, true_val, false_val) - gần ternary nhất
  • IFNULL(cot, gia_tri_mac_dinh) - thay NULL bằng giá trị
  • NULLIF(cot1, cot2) - trả NULL nếu hai cột bằng nhau

Ví dụ dùng IF() cho ternary:

SELECT IF(tbl.X > 1 AND (tbl.X - tbl.Y) < 0, 0, tbl.X - tbl.Y) AS Result
FROM TernaryOperationDemo tbl;