การใช้ IN Operator ตรวจสอบค่าเดียวกับหลายคอลัมน์
ใน MySQL คุณสามารถตรวจสอบว่าค่าเดียวกันปรากฏในคอลัมน์ไหนได้ด้วย IN Operator** โดยวางค่าด้านซ้ายและรายการคอลัมน์ด้านขวา
รูปแบบคำสั่ง
SELECT * FROM your_table_name
WHERE 'search_value' IN (column1, column2, column3, ...);
ตัวอย่างการใช้งานจริง
1. สร้างตารางนักศึกษา
CREATE TABLE OneValueFromAllColumns (
StudentId INT,
StudentFirstname VARCHAR(200),
StudentLastname VARCHAR(200),
StudentAge INT
);
2. เพิ่มข้อมูล
INSERT INTO OneValueFromAllColumns VALUES
(1, 'John', 'Smith', 23),
(2, 'Carol', 'Taylor', 22),
(3, 'Maria', 'Garcia', 19),
(4, 'Bob', 'Wilson', 21);
3. ค้นหา 'Taylor' ในทุกคอลัมน์
SELECT * FROM OneValueFromAllColumns
WHERE 'Taylor' IN (StudentId, StudentFirstname, StudentLastname, StudentAge);
ผลลัพธ์
| StudentId | StudentFirstname | StudentLastname | StudentAge |
| 2 | Carol | Taylor | 22 |
วิธีอื่นๆ เปรียบเทียบ
| วิธี | คำสั่ง | ข้อดี | ข้อเสีย |
| IN (คอลัมน์...) | 'val' IN (c1, c2, c3) | สั้น, อ่านง่าย | Type Conversion Warning |
| OR แบบเต็ม | c1='val' OR c2='val' OR c3='val' | ชัดเจน, ใช้ Index ได้ | ยาว, ซ้ำซ้อน |
| CONCAT + LIKE | CONCAT(c1,',',c2,',',c3) LIKE '%val%' | ค้นหาแบบ Partial | ช้า, ไม่ใช้ Index |
| JSON_CONTAINS | JSON_CONTAINS(JSON_ARRAY(c1,c2,c3), 'val') | Type-safe | MySQL 5.7+, Overhead |
ข้อควรระวัง
- ⚠️ Type Conversion: MySQL จะแปลง Type ให้ตรงกัน (อาจมี Warning)
- 🔍 Index: วิธีนี้ ไม่ใช้ Index ได้ (Full Table Scan)
- 📊 เหมาะกับตารางเล็ก หรือ Query ไม่บ่อย
- 🎯 ตารางใหญ่/Query บ่อย → ควร Normalize Schema หรือใช้ Fulltext Search
การแก้ไข Warning
-- Cast ค่าค้นหาให้ตรง Type ของคอลัมน์
WHERE CAST('Taylor' AS CHAR) IN (StudentFirstname, StudentLastname)
WHERE 'Taylor' IN (CAST(StudentId AS CHAR), StudentFirstname, StudentLastname, CAST(StudentAge AS CHAR))