การกรองแถวที่มีค่า NULL ด้วย IFNULL() ในเงื่อนไข WHERE
เราสามารถใช้ IFNULL() ภายในเงื่อนไข WHERE เพื่อแทนที่ค่า NULL ด้วยค่าเริ่มต้น แล้วค่อยเปรียบเทียบ ทำให้สามารถกรองแถวที่มี NULL ได้ตามตองการ
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (Value1 INT, Value2 INT);
Query OK, 0 rows affected (0.75 sec)
mysql> INSERT INTO DemoTable VALUES(10, NULL);
mysql> INSERT INTO DemoTable VALUES(20, 40);
mysql> INSERT INTO DemoTable VALUES(3, NULL);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 10 | NULL |
| 20 | 40 |
| 3 | NULL |
+--------+--------+
3 rows in set (0.00 sec)
คำสั่งแสดงแถวที่ Value1 > Value2 (ถือ NULL เป็น 0)
mysql> SELECT * FROM DemoTable WHERE Value1 > IFNULL(Value2, 0);
ผลลัพธ์:
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 10 | NULL |
| 3 | NULL |
+--------+--------+
2 rows in set (0.00 sec)
คำอธิบาย
IFNULL(Value2, 0): ถ้า Value2 เป็น NULL ให้ใช้ 0 แทน- แถว 1: Value1=10, Value2=NULL → IFNULL=0 → 10 > 0 จริง → เลือก
- แถว 2: Value1=20, Value2=40 → IFNULL=40 → 20 > 40 เท็จ → ไม่เลือก
- แถว 3: Value1=3, Value2=NULL → IFNULL=0 → 3 > 0 จริง → เลือก
- เทคนิคนี้ช่วยให้เปรียบเทียบกับ NULL ได้โดยไม่ต้องเขียน
Value2 IS NULL OR Value1 > Value2