การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1862 (
Value1 INT, Value2 INT, Value3 INT, Value4 INT
);
mysql> INSERT INTO DemoTable1862 VALUES(43, 34, 56, 42);
mysql> INSERT INTO DemoTable1862 VALUES(NULL, 78, 65, NULL);
mysql> INSERT INTO DemoTable1862 VALUES(110, NULL, 78, NULL);
ข้อมูลในตาราง
+--------+--------+--------+--------+
| Value1 | Value2 | Value3 | Value4 |
+--------+--------+--------+--------+
| 43 | 34 | 56 | 42 |
| NULL | 78 | 65 | NULL |
| 110 | NULL | 78 | NULL |
+--------+--------+--------+--------+
ใช้ GREATEST หาแถวที่มี NULL อย่างน้อย 1 คอลัมน์
mysql> SELECT * FROM DemoTable1862
WHERE GREATEST(Value1, Value2, Value3, Value4) IS NULL;
ผลลัพธ์ (แถวที่ 2 และ 3 มี NULL):
+--------+--------+--------+--------+
| Value1 | Value2 | Value3 | Value4 |
+--------+--------+--------+--------+
| NULL | 78 | 65 | NULL |
| 110 | NULL | 78 | NULL |
+--------+--------+--------+--------+
หลักการทำงาน
GREATEST()คืนค่าสูงสุดจากรายการ- ถ้ามี NULL ใดๆ ในพารามิเตอร์ → คืนค่า NULL
- ดังนั้น
GREATEST(...) IS NULL= มี NULL อย่างน้อย 1 ตัว
วิธีอื่นที่อ่านง่ายกว่า
-- ใช้ OR ตรวจสอบทีละคอลัมน์ (ชัดเจนกว่า)
WHERE Value1 IS NULL OR Value2 IS NULL OR Value3 IS NULL OR Value4 IS NULL
-- ใช้ COALESCE (ตรวจสอบว่าทุกคอลัมน์เป็น NULL)
WHERE COALESCE(Value1, Value2, Value3, Value4) IS NULL -- ทุกคอลัมน์ NULL
-- MySQL 8.0+ ใช้ JSON_CONTAINS (ถ้าเป็น JSON)
-- WHERE JSON_CONTAINS(CAST(ROW(Value1,Value2,Value3,Value4) AS JSON), CAST(NULL AS JSON))
ข้อควรระวัง
GREATESTและLEASTคืน NULL ถ้ามี NULL อยู่ใน Arguments- พฤติกรรมนี้แตกต่างจากบาง DBMS (PostgreSQL: GREATEST ข้าม NULL)
- สำหรับ String ใช้
GREATESTได้เหมือนกัน (เปรียบเทียบ Lexicographically)