Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Kết hợp nhiều cột rồi so khớp với LIKE trong MySQL (CONCAT)

Để 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.