Để tìm kiếm trên sự kết hợp của nhiều cột (ví dụ: ghép FirstName và LastName thành 'JohnSmith' rồi so khớp với mẫu), hãy dùng hàm CONCAT() trong mệnh đề WHERE.
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value1 VARCHAR(10),
Value2 VARCHAR(10)
);
mysql> INSERT INTO DemoTable (Value1, Value2) VALUES
('10', '345'), ('14', '789'), ('18', '234');
Dữ liệu
mysql> SELECT * FROM DemoTable;
+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1 | 10 | 345 |
| 2 | 14 | 789 |
| 3 | 18 | 234 |
+----+--------+--------+
Tìm hàng có chuỗi ghép chứa '147'
Ghép Value1 + Value2: '10345', '14789', '18234'. Tìm '147' khớp hàng 2 ('14' + '789' -> '14789').
mysql> SELECT * FROM DemoTable
WHERE CONCAT(Value1, Value2) LIKE '%147%';
Kết quả
+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 2 | 14 | 789 |
+----+--------+--------+
Mở rộng: Thêm ký tự phân tách
Nếu muốn ghép có dấu phân cách (ví dụ: '14-789'):
SELECT * FROM DemoTable
WHERE CONCAT(Value1, '-', Value2) LIKE '%14-78%';
Lưu ý hiệu năng: CONCAT trong WHERE khiến MySQL không thể dùng index trên các cột riêng lẻ. Nếu truy vấn thường xuyên, cân nhắc:
- Tạo cột ảo (Generated Column) lưu giá trị ghép và index trên cột đó (MySQL 5.7+).
- Tạo cột vật lý lưu giá trị ghép và trigger cập nhật.
- Sử dụng Fulltext Search nếu phù hợp.