การใช้ IN() กับ Tuple (หลายคอลัมน์) ใน MySQL
MySQL รองรับการใช้ IN กับ Tuple (คู่ค่าหลายคอลัมน์) รูปแบบ WHERE (col1, col2) IN ((val1, val2), (val3, val4), ...) เพื่อกรองแถวที่ตรงกับชุดค่าที่กำหนด
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable1045 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100)
) AUTO_INCREMENT=100;
Query OK, 0 rows affected (0.62 sec)
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('John');
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('Chris');
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('Robert');
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('Mike');
mysql> INSERT INTO DemoTable1045(FirstName) VALUES('Adam');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable1045;
ผลลัพธ์:
+-----+-----------+
| Id | FirstName |
+-----+-----------+
| 100 | John |
| 101 | Chris |
| 102 | Robert |
| 103 | Mike |
| 104 | Adam |
+-----+-----------+
5 rows in set (0.00 sec)
คำสั่งเลือกแถวที่ตรงกับ Tuple (Id, FirstName) ที่กำหนด
mysql> SELECT * FROM DemoTable1045 tbl
WHERE (tbl.Id, tbl.FirstName) IN ((101, 'Chris'), (102, 'Robert'), (104, 'Adam'));
ผลลัพธ์:
+-----+-----------+
| Id | FirstName |
+-----+-----------+
| 101 | Chris |
| 102 | Robert |
| 104 | Adam |
+-----+-----------+
3 rows in set (0.05 sec)
คำอธิบาย
(tbl.Id, tbl.FirstName): Tuple ของคอลัมน์ที่ต้องการเปรียบเทียบIN ((101, 'Chris'), (102, 'Robert'), (104, 'Adam')): ชุด Tuple ที่ยอมรับ- MySQL จะเปรียบเทียบแบบ Component-wise: Id ตรง และ FirstName ตรง
- มีประโยชน์เมื่อต้องการกรองด้วย Primary Key แบบ Composite Key หรือเงื่อนไขหลายคอลัมน์พร้อมกัน