ภาพรวม
สามารถตรวจสอบว่าคอลัมน์เป็น Empty String ('') หรือ 0 พร้อมกันได้ในเงื่อนไขเดียวด้วย IN()
ตัวอย่างสมบูรณ์
1. สร้างตารางและข้อมูล
CREATE TABLE DemoTable (ClientId VARCHAR(40));
INSERT INTO DemoTable VALUES ('CLI-01');
INSERT INTO DemoTable VALUES ('0');
INSERT INTO DemoTable VALUES ('CLI-02');
INSERT INTO DemoTable VALUES ('CLI-00');
INSERT INTO DemoTable VALUES (''); -- Empty String
INSERT INTO DemoTable VALUES ('CLI-98');
2. ข้อมูลทั้งหมด
SELECT * FROM DemoTable;
+----------+
| ClientId |
+----------+
| CLI-01 |
| 0 |
| CLI-02 |
| CLI-00 |
| | -- Empty String
| CLI-98 |
+----------+
3. Query: หาแถวที่เป็น '0' หรือ '' (Empty)
SELECT * FROM DemoTable
WHERE ClientId IN ('0', '');
4. ผลลัพธ์
+----------+
| ClientId |
+----------+
| 0 |
| |
+----------+
เทคนิคเพิ่มเติม
ใช้ COALESCE แปลง NULL → '' แล้วเช็ค
-- หากคอลัมน์อาจเป็น NULL ด้วย
SELECT * FROM DemoTable
WHERE COALESCE(ClientId, '') IN ('0', '');
ใช้ LENGTH() = 0 (จับ Empty String และ NULL ได้)
SELECT * FROM DemoTable
WHERE LENGTH(ClientId) = 0 OR ClientId = '0';
ใช้ TRIM() (จับ Space-only string ด้วย)
SELECT * FROM DemoTable
WHERE TRIM(ClientId) = '' OR ClientId = '0';
ประสิทธิภาพ
IN ('0', '')- ใช้ Index ได้ (ถ้าคอลัมน์มี Index)ORแบบแยก - ใช้ Index ได้เหมือนกันFUNCTION(col) = ...- ไม่ใช้ Index (Non-SARGable)
ข้อแตกต่าง: 0 (Number) vs '0' (String)
-- คอลัมน์ VARCHAR: '0' คือ String, 0 จะถูก Cast เป็น '0'
WHERE ClientId IN (0, '') -- ทำงานได้ (Implicit Cast)
WHERE ClientId IN ('0', '') -- ชัดเจนกว่า แนะนำ
สรุป
ใช้ WHERE column IN ('0', '') ตรวจสอบ Empty String และ '0' พร้อมกันในเงื่อนไขเดียว ใช้ Index ได้ อ่านง่าย