ปัญหา
MySQL ไม่มีคำสั่ง LIKE IN() โดยตรง แต่สามารถทำได้ด้วย Regular Expression (REGEXP)
รูปแบบคำสั่ง
SELECT * FROM yourTableName WHERE yourColumnName REGEXP 'value1|value2|value3|...|valueN';
ตัวอย่าง
สร้างตารางและข้อมูล
mysql> create table INDemo (Id int, Name varchar(100)); mysql> insert into INDemo values(100,'John'),(104,'Carol'),(108,'David'),(112,'Smith'),(116,'Johnson'),(120,'Sam');
ใช้ REGEXP (เหมือน IN)
mysql> select * from INDemo where Id REGEXP '112|116|100';
+------+---------+ | Id | Name | +------+---------+ | 100 | John | | 112 | Smith | | 116 | Johnson | +------+---------+ 3 rows in set (0.21 sec)
เปรียบเทียบกับ IN()
mysql> select * from INDemo where Id IN(112,116,100);
+------+---------+ | Id | Name | +------+---------+ | 100 | John | | 112 | Smith | | 116 | Johnson | +------+---------+ 3 rows in set (0.00 sec)
ผลลัพธ์เหมือนกัน
REGEXP ด้วย Pattern '112|116|100' ให้ผลลัพธ์เท่ากับ IN(112,116,100)
ข้อดีของ REGEXP
- รองรับ Pattern ซับซ้อน (Wildcard, Character Class, Quantifier)
- ใช้กับ String ได้ (IN() ต้องการค่าที่ตรงเป๊ะ)
หมายเหตุ: REGEXP ช้ากว่า IN() สำหรับค่าคงที่หลายค่า ควรใช้ IN() หากเป็นไปได้