MySQL ไม่มี Ternary Operator condition ? true_val : false_val แบบ C/C++ แต่ใช้ CASE WHEN ... THEN ... ELSE ... END แทนได้
เปรียบเทียบกับ C
// C Code result = (X > 1 && (X-Y) < 0) ? X : (X-Y);
MySQL Equivalent
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;
ตัวอย่างการใช้งาน
สร้างตาราง:
mysql> create table TernaryOperationDemo (X int, Y int);
เพิ่มข้อมูล:
mysql> insert into TernaryOperationDemo values(10,5),(5,15),(20,15),(15,25),(10,-11);
ข้อมูล:
+------+------+ | X | Y | +------+------+ | 10 | 5 | | 5 | 15 | | 20 | 15 | | 15 | 25 | | 10 | -11 | +------+------+
ใช้ CASE WHEN:
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;
ผลลัพธ์:
+--------+ | Result | +--------+ | 5 | | 0 | | 5 | | 0 | | 21 | +--------+
รูปแบบ CASE WHEN ทั้งสองแบบ
-- Simple CASE CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END -- Searched CASE (ยืดหยุ่นกว่า) CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END
MySQL 8.0+ ยังไม่มี Ternary Operator ต้องใช้ CASE WHEN ตลอด