เลือกค่าที่ไม่ใช่ NULL จากสองคอลัมน์
เมื่อมีสองคอลัมน์และต้องการค่าที่ไม่ใช่ NULL (優先คอลัมน์แรก ไม่ใช่แล้วเอาคอลัมน์ที่สอง) มีหลายวิธีใน MySQL
วิธีที่ 1: IFNULL() - สองอาร์กิวเมนต์
SELECT IFNULL(column1, column2) AS result FROM yourTable;
วิธีที่ 2: COALESCE() - มาตรฐาน SQL, รองรับหลายคอลัมน์
SELECT COALESCE(column1, column2) AS result FROM yourTable;
วิธีที่ 3: CASE Statement - ยืดหยุ่นที่สุด
SELECT CASE
WHEN column1 IS NOT NULL THEN column1
ELSE column2
END AS result
FROM yourTable;
วิธีที่ 4: IF() Function - MySQL Specific
SELECT IF(column1 IS NULL, column2, column1) AS result FROM yourTable;
ตัวอย่างการใช้งาน
สร้างตาราง:
CREATE TABLE SelectNotNullColumnsDemo (
Id INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(20),
Age INT,
PRIMARY KEY(Id)
);
เพิ่มข้อมูล (สลับ NULL):
INSERT INTO SelectNotNullColumnsDemo(Name, Age) VALUES('John', NULL);
INSERT INTO SelectNotNullColumnsDemo(Name, Age) VALUES(NULL, 23);
ผลลัพธ์ทั้ง 4 วิธีเหมือนกัน:
+--------------+
| NotNULLValue |
+--------------+
| John |
| 23 |
+--------------+
เปรียบเทียบ
| วิธี | มาตรฐาน | รองรับ >2 คอลัมน์ | เงื่อนไขซับซ้อน | ประสิทธิภาพ |
|---|---|---|---|---|
| IFNULL(a,b) | MySQL | ไม่ได้ | ไม่ได้ | เร็วที่สุด |
| COALESCE(a,b,...) | ANSI SQL | ได้ | ไม่ได้ | เร็ว |
| CASE WHEN... | ANSI SQL | ได้ | ได้ | ปานกลาง |
| IF(cond, a, b) | MySQL | ไม่ได้โดยตรง | ได้ | เร็ว |
ขยายเป็นหลายคอลัมน์ (3+)
-- COALESCE: สั้นที่สุด
SELECT COALESCE(col1, col2, col3, col4, 'default') FROM table;
-- CASE: ควบคุมลำดับและเงื่อนไขได้
SELECT CASE
WHEN col1 IS NOT NULL THEN col1
WHEN col2 IS NOT NULL THEN col2
WHEN col3 IS NOT NULL THEN col3
ELSE 'default'
END FROM table;
คำแนะนำ
- ใช้
COALESCEส่วนใหญ่ (มาตรฐาน, อ่านง่าย, รองรับหลายคอลัมน์) - ใช้
IFNULLเฉพาะ 2 คอลัมน์ และ critical performance - ใช้
CASEเมื่อมี logic ซับซ้อน (เช่น ตรวจสอบ empty string ด้วย)