ฟังก์ชัน COALESCE() ใน MySQL ใช้เพื่อคืนค่าตัวแรกที่ไม่ใช่ NULL จากชุดของค่า (arguments) ที่ส่งเข้าไป
เหมาะสำหรับการจัดการค่าที่อาจเป็น NULL โดยเลือกใช้ค่าทดแทนแบบลำดับความสำคัญ เช่น ถ้าคอลัมน์หนึ่งมีค่าเป็น NULL ก็ให้แสดงค่าอื่นที่สำรองไว้แทน
COALESCE() ช่วยให้สามารถแสดงข้อมูลที่ครบถ้วนโดยไม่ติดปัญหา NULL ในผลลัพธ์ และยังสามารถใช้แทน IFNULL() ได้แต่ยืดหยุ่นมากกว่า
ประโยชน์ของฟังก์ชัน COALESCE()
- ใช้แทนค่าที่เป็น
NULLด้วยค่าทดแทนที่กำหนดไว้ - ใช้เลือกค่าจากหลายคอลัมน์/ตัวแปร โดยคืนค่าตัวแรกที่ไม่ใช่
NULL - ป้องกันข้อผิดพลาดหรือการแสดงผลที่ว่างเปล่า
- ใช้ใน
SELECT,WHERE,ORDER BY, หรือJOINได้ - ยืดหยุ่นกว่า
IFNULL()เพราะรับได้มากกว่าสองค่า
รูปแบบการใช้งาน
COALESCE(value1, value2, value3, ...)
value1, value2, ...คือชุดของค่าหรือคอลัมน์ที่ต้องการตรวจสอบค่าแรกที่ไม่ใช่NULL- หากค่าทั้งหมดเป็น
NULLผลลัพธ์จะเป็นNULL
ตัวอย่างการใช้งาน
SQL
SELECT COALESCE(NULL, NULL, 'default') AS result;
-- ผลลัพธ์: 'default'
SELECT COALESCE(NULL, 25, 100) AS result;
-- ผลลัพธ์: 25สมมติว่ามีตารางชื่อ contacts ซึ่งมีข้อมูลดังนี้
| contact_id | phone | fallback_contact | |
|---|---|---|---|
| 1 | NULL | 0891234567 | NULL |
| 2 | [email protected] | NULL | NULL |
| 3 | NULL | NULL | Line: user123 |
| 4 | NULL | NULL | NULL |
แสดงช่องทางติดต่อแรกที่ไม่เป็น NULL
SQL
SELECT contact_id,
COALESCE(email, phone, fallback_contact, 'ไม่มีข้อมูลติดต่อ') AS preferred_contact
FROM contacts;หมายเหตุ
- ถ้าค่าทั้งหมดที่ส่งเข้า
COALESCE()เป็นNULLผลลัพธ์จะเป็นNULL - ค่าที่ส่งเข้าไปควรมีชนิดข้อมูลใกล้เคียงกัน (เช่น เป็นข้อความทั้งหมด หรือเป็นจำนวนทั้งหมด) เพื่อหลีกเลี่ยง error หรือผลลัพธ์ไม่ตรงตามความต้องการ
- หากใช้กับ
DATE,DECIMAL, หรือBOOLEANให้ระวังการแปลงชนิดข้อมูลโดยอัตโนมัติ - ไม่สามารถใช้
COALESCE()เพื่อกำหนดลำดับความสำคัญแบบมีเงื่อนไข (เช่น if-else ซ้อนกัน) ควรใช้ร่วมกับCASEถ้าต้องการความซับซ้อนมากขึ้น