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

เลือกคอลัมน์ หากเป็น NULL ให้เลือกคอลัมน์อื่นแทนด้วย COALESCE() ใน MySQL

ภาพรวม

ใช้ COALESCE() เลือกค่าคอลัมน์แรกที่ไม่ใช่ NULL จากรายการคอลัมน์/ค่าที่ระบุ

ไวยากรณ์

COALESCE(col1, col2, col3, ..., default_value)
-- คืนค่าแรกที่ไม่ใช่ NULL

ตัวอย่างสมบูรณ์

1. สร้างตารางและข้อมูล (มี NULL ในคอลัมน์ต่างกัน)

CREATE TABLE DemoTable1470 (
    FirstName VARCHAR(20),
    Age INT
);

INSERT INTO DemoTable1470 VALUES ('Robert', 23);
INSERT INTO DemoTable1470 VALUES ('Bob', NULL);
INSERT INTO DemoTable1470 VALUES (NULL, 25);

2. ข้อมูลทั้งหมด

SELECT * FROM DemoTable1470;
+-----------+------+
| FirstName | Age  |
+-----------+------+
| Robert    | 23   |
| Bob       | NULL |
| NULL      | 25   |
+-----------+------+

3. COALESCE(FirstName, Age) - เลือก FirstName ถ้า NULL ให้ Age

SELECT COALESCE(FirstName, Age) AS FirstNameOrAgeValue
FROM DemoTable1470;

4. ผลลัพธ์

+---------------------+
| FirstNameOrAgeValue |
+---------------------+
| Robert              |  -- FirstName ไม่ NULL
| Bob                 |  -- FirstName ไม่ NULL (Age เป็น NULL แต่ไม่ได้ใช้)
| 25                  |  -- FirstName เป็น NULL → ใช้ Age
+---------------------+

การประยุกต์ใช้จริง

1. Fallback Chain: Phone → Email → 'No Contact'

SELECT COALESCE(Phone, Email, 'No Contact') AS Contact
FROM Customers;

2. คำนวณค่า Default ใน Expression

SELECT 
    ProductName,
    COALESCE(DiscountPrice, Price, 0) AS FinalPrice
FROM Products;

3. ใน UPDATE (ตั้งค่า Default)

UPDATE Users 
SET LastLogin = COALESCE(LastLogin, '1970-01-01')
WHERE LastLogin IS NULL;

COALESCE vs IFNULL vs CASE

ฟังก์ชันArgumentStandardใช้เมื่อ
COALESCE(a,b,c...)2+ANSI SQLหลาย Fallback, Portable
IFNULL(a,b)2MySQL Onlyแค่ 2 ค่า สั้นกว่า
CASE WHEN a IS NULL THEN b ELSE a END-ANSI SQLLogic ซับซ้อน

ข้อควรระวัง

  • Data Type ของทุก Argument ควรเข้ากันได้ (MySQL จะ Convert อัตโนมัติ)
  • COALESCE(FirstName, Age) → FirstName เป็น VARCHAR, Age เป็น INT → ผลลัพธ์เป็น VARCHAR (Number แปลงเป็น String)
  • ทุก Argument เป็น NULL → คืน NULL

สรุป

ใช้ COALESCE(col1, col2, ...) เลือกค่าคอลัมน์แรกที่ไม่ใช่ NULL สำหรับ Fallback, Default Value, หรือรวมคอลัมน์สำรอง