Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เลือกคอลัมน์ที่ไม่ใช่ NULL จากสองคอลัมน์ใน MySQL (COALESCE, IFNULL, CASE, IF)

เลือกค่าที่ไม่ใช่ 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 ด้วย)