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

Tìm giá trị khớp trên nhiều cột với LIKE và CONCAT trong MySQL

Giới thiệu

Kết hợp CONCAT() gộp nhiều cột thành một chuỗi, sau đó dùng LIKE tìm mẫu trên chuỗi gộp đó.

1. Tạo bảng và dữ liệu

mysql> create table DemoTable (
    -> StudentName varchar(20),
    -> StudentSubject varchar(20)
    -> ); 
Query OK, 0 rows affected (0.58 sec)

mysql> insert into DemoTable values('John','MySQL'); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Adam','MySQL'); 
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('John','Java'); 
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values('Carol','Java'); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John','MongoDB'); 
Query OK, 1 row affected (0.12 sec)

2. Dữ liệu gốc

mysql> select *from DemoTable;
+-------------+----------------+
| StudentName | StudentSubject |
+-------------+----------------+
| John        | MySQL          |
| Adam        | MySQL          |
| John        | Java           |
| Carol       | Java           |
| John        | MongoDB        |
+-------------+----------------+
5 rows in set (0.00 sec)

3. Tìm "John MySQL" (tên John VÀ môn MySQL)

mysql> select *from DemoTable
    -> where concat(StudentName, ' ', StudentSubject) like '%John MySQL%';

4. Kết quả

+-------------+----------------+
| StudentName | StudentSubject |
+-------------+----------------+
| John        | MySQL          |
+-------------+----------------+
1 row in set (0.00 sec)

Phân tích:

  • CONCAT(StudentName, ' ', StudentSubject) tạo chuỗi: "John MySQL", "Adam MySQL", "John Java"...
  • LIKE '%John MySQL%' khớp chuỗi chứa "John MySQL"
  • Chỉ hàng 1 thỏa mãn

Cách thay thế tốt hơn (dùng AND):

WHERE StudentName = 'John' AND StudentSubject = 'MySQL'

Ưu điểm: Tận dụng index trên từng cột, chính xác, nhanh hơn, dễ đọc.

Khi nào dùng CONCAT+LIKE? Khi cần tìm mẫu phức tạp xuyên cột, ví dụ: tìm "John" ở đầu VÀ "SQL" ở cuối bất kể cột nào.