ใช้ OR รวมเงื่อนไขหลายคอลัมน์ ตรงกับค่าเดียวกัน
เมื่อต้องการค้นหาแถวที่ "คอลัมน์ A = X หรือ คอลัมน์ B = X หรือ คอลัมน์ C = X" ใช้ OR เชื่อมเงื่อนไขแต่ละคอลัมน์
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(10),
LastName VARCHAR(10),
Age INT,
CountryName VARCHAR(10)
);
INSERT INTO DemoTable (FirstName, LastName, Age, CountryName) VALUES
('John', 'Smith', 21, 'US'),
('Carol', 'Taylor', 22, 'AUS'),
('David', 'Miller', 19, 'UK');
ข้อมูลในตาราง
+----+-----------+----------+------+-------------+ | Id | FirstName | LastName | Age | CountryName | +----+-----------+----------+------+-------------+ | 1 | John | Smith | 21 | US | | 2 | Carol | Taylor | 22 | AUS | | 3 | David | Miller | 19 | UK | +----+-----------+----------+------+-------------+
คำสั่งค้นหา: FirstName='Carol' OR Age=22 OR CountryName='AUS'
SELECT * FROM DemoTable WHERE FirstName = 'Carol' OR Age = 22 OR CountryName = 'AUS';
ผลลัพธ์ (แถวที่ 2 ตรงทั้ง 3 เงื่อนไข)
+----+-----------+----------+------+-------------+ | Id | FirstName | LastName | Age | CountryName | +----+-----------+----------+------+-------------+ | 2 | Carol | Taylor | 22 | AUS | +----+-----------+----------+------+-------------+
คำอธิบาย: OR ต้องการให้เงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง กรณีนี้แถวที่ 2 ตรงทั้ง 3 ข้อ (Carol, 22, AUS)
ประยุกต์ใช้ IN() กับหลายคอลัมน์ (MySQL 8.0+ Row Constructor):
WHERE (FirstName, Age, CountryName) IN (('Carol', 22, 'AUS'));
⚐ ประสิทธิภาพ: OR ระหว่างคอลัมน์ต่างกัน ทำให้ Index ยากต่อการใช้งาน (Index Merge หรือ Full Scan) หาก Query บ่อย ควรสร้าง Index แยกต่อคอลัมน์ หรือ Fulltext Search หากเป็นข้อความ
ตัวเลือก: ใช้ UNION ALL (อาจใช้ Index ได้ดีกว่า)
SELECT * FROM DemoTable WHERE FirstName = 'Carol' UNION ALL SELECT * FROM DemoTable WHERE Age = 22 UNION ALL SELECT * FROM DemoTable WHERE CountryName = 'AUS';
(อาจได้แถวซ้ำ ต้อง DISTINCT หรือ UNION)