การใช้ตาราง Dummy ชื่อ DUAL
ใน MySQL ตาราง DUAL เป็นตารางดัชนี (Dummy Table) ที่มีอยู่เสมอ ใช้สำหรับ SELECT ที่ไม่ต้องการ FROM ตารางจริง
คำสั่งสำหรับ Empty Result Set
SELECT 1 FROM DUAL WHERE FALSE;
ผลลัพธ์
Empty set (0.00 sec)
การทดสอบเปรียบเทียบ
เงื่อนไข TRUE (มีผลลัพธ์)
SELECT 1 FROM DUAL WHERE TRUE;
| 1 |
|---|
| 1 |
เงื่อนไข FALSE (Empty Result Set)
SELECT 1 FROM DUAL WHERE FALSE;
Empty set (0.00 sec)
กรณีใช้งานจริง
- 🧪 Testing: ทดสอบ Query Structure, Function, Expression โดยไม่ต้องมีข้อมูล
- 🔧 Stored Procedure: ใช้ใน Logic ควบคุม Flow (IF/ELSE) ที่ต้องการคืนค่า Empty Result Set
- 📦 UNION: รวมกับ Query อื่นที่อาจคืนค่า Empty
- ⚡ Performance: เร็วมาก ไม่ต้อง Scan ตารางจริง
ตัวอย่างใน Stored Procedure
CREATE PROCEDURE GetData(IN param INT)
BEGIN
IF param > 0 THEN
SELECT * FROM real_table WHERE id = param;
ELSE
SELECT 1 FROM DUAL WHERE FALSE; -- Return empty result set
END IF;
END;
คำสั่งที่เทียบเท่า
SELECT * FROM real_table WHERE 1=0(ต้องมีตารางจริง)SELECT 1 WHERE FALSE(MySQL รองรับ SELECT โดยไม่มี FROM)SELECT * FROM (SELECT 1 AS x) AS t WHERE FALSE
ข้อดีของ DUAL
- ✅ มาตรฐาน SQL (Oracle, MySQL, PostgreSQL, SQLite รองรับ)
- ✅ ไม่ต้องมีสิทธิ์เข้าถึงตารางใดๆ
- ✅ ทำงานได้แม้ Database จะว่างเปล่า