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

ตรวจสอบ Empty String และ 0 พร้อมกันในเงื่อนไขเดียวด้วย IN() ใน MySQL

ภาพรวม

สามารถตรวจสอบว่าคอลัมน์เป็น 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 ได้ อ่านง่าย