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

Lọc bản ghi MySQL với RLIKE (REGEXP) cho nhiều từ khóa

Vấn đề: Tìm hàng có cột chứa một trong nhiều từ khóa

Cần lọc cột Subject chứa 'SQL' HOẶC 'Python'.

Giải pháp: RLIKE (synonym của REGEXP) với toán tử | (OR)

Cú pháp: WHERE column RLIKE 'keyword1|keyword2|...'.

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

CREATE TABLE DemoTable (Subject VARCHAR(20));
INSERT INTO DemoTable VALUES
('MySQL'), ('Python'), ('MongoDB'), ('SQL Server'), ('PL SQL');

2. Truy vấn lọc 'SQL' hoặc 'Python'

SELECT * FROM DemoTable 
WHERE Subject RLIKE 'SQL|Python';

3. Kết quả

+------------+
| Subject    |
+------------+
| MySQL      |
| Python     |
| SQL Server |
| PL SQL     |
+------------+

Giải thích

  • RLIKE = REGEXP – Khớp biểu thức chính quy.
  • 'SQL|Python' – Nghĩa là: khớp 'SQL' HOẶC 'Python' ở bất kỳ vị trí nào trong chuỗi.
  • Khớp một phần: 'MySQL' chứa 'SQL', 'PL SQL' chứa 'SQL'.

Khớp chính xác từ (whole word)

WHERE Subject RLIKE '[[:<:]]SQL[[:>:]]|[[:<:]]Python[[:>:]]'
  • [[:<:]], [[:>:]] – Ranh giới từ (word boundary) trong MySQL regex.
  • Chỉ khớp 'SQL' đứngalone, không khớp 'MySQL', 'PostgreSQL'.

Lưu ý hiệu suất

  • RLIKE/REGEXP không dùng chỉ mục thông thường → full table scan.
  • Với bảng lớn, cân nhắc FULLTEXT INDEX + MATCH() AGAINST().
  • Hoặc chuẩn hóa: tách từ khóa vào bảng riêng (many-to-many).