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

วิธีตรวจสอบหลายคอลัมน์หาค่าเดียวใน MySQL

การใช้ 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);

ผลลัพธ์

StudentIdStudentFirstnameStudentLastnameStudentAge
2CarolTaylor22

วิธีอื่นๆ เปรียบเทียบ

วิธีคำสั่งข้อดีข้อเสีย
IN (คอลัมน์...)'val' IN (c1, c2, c3)สั้น, อ่านง่ายType Conversion Warning
OR แบบเต็มc1='val' OR c2='val' OR c3='val'ชัดเจน, ใช้ Index ได้ยาว, ซ้ำซ้อน
CONCAT + LIKECONCAT(c1,',',c2,',',c3) LIKE '%val%'ค้นหาแบบ Partialช้า, ไม่ใช้ Index
JSON_CONTAINSJSON_CONTAINS(JSON_ARRAY(c1,c2,c3), 'val')Type-safeMySQL 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))