การใช้ CASE WHEN แทนการใช้ WHERE ภายใน CASE
MySQL ไม่รองรับการเขียน WHERE โดยตรงภายใน CASE แต่เราสามารถใช้ CASE WHEN condition THEN ... ELSE ... END เพื่อตรวจสอบเงื่อนไขที่เกี่ยวข้องกับหลายคอลัมน์ได้
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable1040 (Value1 INT, Value2 INT, Value3 INT);
Query OK, 0 rows affected (0.65 sec)
mysql> INSERT INTO DemoTable1040 VALUES(10,30,1);
mysql> INSERT INTO DemoTable1040 VALUES(40,20,50);
mysql> INSERT INTO DemoTable1040 VALUES(80,90,100);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable1040;
ผลลัพธ์:
+--------+--------+--------+
| Value1 | Value2 | Value3 |
+--------+--------+--------+
| 10 | 30 | 1 |
| 40 | 20 | 50 |
| 80 | 90 | 100 |
+--------+--------+--------+
3 rows in set (0.00 sec)
คำสั่ง CASE WHEN: ถ้า Value1=40 และ Value2=20 ให้เลือก Value2 มิฉะนั้น Value1
mysql> SELECT CASE WHEN (Value1 = 40 AND Value2 = 20) THEN Value2 ELSE Value1 END AS selectedValue
FROM DemoTable1040;
ผลลัพธ์:
+---------------+
| selectedValue |
+---------------+
| 10 |
| 20 |
| 80 |
+---------------+
3 rows in set (0.00 sec)
คำอธิบาย
CASE WHEN (Value1=40 AND Value2=20) THEN Value2 ELSE Value1 END: ตรวจสอบเงื่อนไขรวม 2 คอลัมน์- แถวแรก: (10,30) ไม่ตรง → ELSE → Value1=10
- แถวสอง: (40,20) ตรง → THEN → Value2=20
- แถวสาม: (80,90) ไม่ตรง → ELSE → Value1=80
- รูปแบบ CASE WHEN ... THEN ... ELSE ... END ใช้ได้ใน SELECT, WHERE, ORDER BY, GROUP BY
- สามารถมี WHEN หลายอันได้:
CASE WHEN cond1 THEN v1 WHEN cond2 THEN v2 ELSE v3 END