Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SWITCH với LIKE bên trong truy vấn SELECT trong MySQL

Mysql hỗ trợ hai biến thể của trường hợp, biến thể bạn sử dụng trong truy vấn 2 kém linh hoạt hơn nhưng chỉ hỗ trợ bình đẳng trên một biến duy nhất. Phiên bản khác chỉ định không có biến sau trường hợp và sau đó các điều kiện không chỉ cần bằng nhau:

select id_tag,
case  
   when tag LIKE "%class%" then "class" 
   when tag LIKE "%new%" then "new"
   when tag LIKE "%pack%" then "pack"
end as matching_tag 
from Tags 
where tag LIKE "%class%" OR tag LIKE "%new%" OR tag LIKE "%pack%"

Xem tài liệu để biết thêm chi tiết

CHỈNH SỬA:Đây là giải thích thêm một chút về lý do tại sao truy vấn số 1 của bạn trả lại những gì nó trả về:

Thẻ trường hợp
case tag
   when tag LIKE "%class%" then "class" 
   when tag LIKE "%new%" then "new"
   when tag LIKE "%pack%" then "pack"
end as matching_tag

mong đợi nhận được một giá trị theo nghĩa đen để so sánh giữa when ... then Trong trường hợp trên, biểu thức tag LIKE "%class%" , thẻ tag LIKE "%new%" và thẻ tag LIKE "%pack%" tất cả đều được đánh giá trước khi so sánh trường hợp thực tế. Tuy nhiên (!), điều xảy ra là chúng trở thành 0 hoặc 1 và khi được so sánh với giá trị của thẻ, giá trị đầu tiên của 0 sẽ khớp với bất kỳ char nào (char sẽ được chuyển thành 0) - điều này phù hợp với kết quả của truy vấn đầu tiên của bạn.

Đây là một truy vấn hiển thị các giá trị logic cho các biểu thức có liên quan:

select id_tag, tag LIKE "%class%", tag LIKE "%new%", tag = 0, case tag     when tag LIKE "%class%" then "class"     when tag LIKE "%new%" then "new"    when tag LIKE "%pack%" then "pack" end as matching_tag  from Tags  where tag LIKE "%class%" OR tag LIKE "%new%" OR tag LIKE "%pack%";

Đó là lý do tại sao bạn nhận được kết quả bất ngờ; CAST im lặng là một cạm bẫy tiêu chuẩn ở đây.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tạo biểu đồ động với dữ liệu MySQL?

  2. Ngủ đông Lưu hành vi lạ

  3. Chuyển đổi từ mysqli_query sang câu lệnh chuẩn bị sẵn mysqli bằng cách sử dụng chức năng MẬT KHẨU MẬT KHẨU mysql

  4. CẬP NHẬT KHÓA DUPLICATE CÓ ĐIỀU KIỆN (Chỉ cập nhật nếu điều kiện nhất định là đúng)

  5. MySQL A hoặc B nhưng KHÔNG phải cả hai