MySQL cho phép dùng IN() với tuple (cặp giá trị) để lọc hàng khớp chính xác nhiều cột cùng lúc: WHERE (col1, col2) IN ((val1,val2), (val3,val4), ...).
Ví dụ minh họa
Tạo bảng có AUTO_INCREMENT từ 100:
mysql> create table DemoTable1045 (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(100)
) AUTO_INCREMENT=100;
Chèn dữ liệu:
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');
Hiển thị dữ liệu:
mysql> select * from DemoTable1045;
Kết quả:
+-----+-----------+ | Id | FirstName | +-----+-----------+ | 100 | John | | 101 | Chris | | 102 | Robert | | 103 | Mike | | 104 | Adam | +-----+-----------+
Truy vấn IN với tuple (Id, FirstName)
mysql> select * from DemoTable1045 tbl where (tbl.Id, tbl.FirstName) IN ((101, 'Chris'), (102, 'Robert'), (104,'Adam'));
Kết quả:
+-----+-----------+ | Id | FirstName | +-----+-----------+ | 101 | Chris | | 102 | Robert | | 104 | Adam | +-----+-----------+
Giải thích:
(tbl.Id, tbl.FirstName): Tuple 2 cột bên tráiIN ((101,'Chris'), (102,'Robert'), (104,'Adam')): Danh sách tuple bên phải- So sánh từng cặp: cả Id VÀ FirstName phải khớp
- Hiệu quả hơn nhiều so với:
(Id=101 AND FirstName='Chris') OR (Id=102 AND FirstName='Robert') ...
Ứng dụng: Batch lookup, kiểm tra tồn tại nhiều khóa chính composite, sync dữ liệu giữa hệ thống.