Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PRZEŁĄCZ z LIKE wewnątrz zapytania SELECT w MySQL

Mysql obsługuje dwa warianty przypadku, ten, którego używasz w zapytaniu 2, jest mniej elastyczny, ale obsługuje tylko równość na jednej zmiennej. Druga wersja nie określa żadnej zmiennej po przypadku, a wtedy warunki nie muszą być tylko równością:

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%"

Zobacz dokumentację więcej szczegółów

EDYCJA:Oto nieco więcej wyjaśnień, dlaczego Twoje zapytanie nr 1 zwróciło to, co zwróciło:

case tag
   when tag LIKE "%class%" then "class" 
   when tag LIKE "%new%" then "new"
   when tag LIKE "%pack%" then "pack"
end as matching_tag

oczekuje, że otrzyma wartość dosłowną do porównania między when ... then W powyższym przypadku wyrażenia tag LIKE "%class%" , tag LIKE "%new%" i tag LIKE "%pack%" wszystkie są oceniane przed rzeczywistym porównaniem przypadków. Jednak (!) dzieje się tak, że stają się one 0 lub 1, a po porównaniu z wartością tagu jest to pierwsza wartość 0, która będzie pasować do dowolnego znaku (char zostanie rzutowany na 0) — jest to zgodne z wynikami Twojego pierwszego zapytania.

Oto zapytanie, które pokazuje wartości logiczne dla odpowiednich wyrażeń:

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%";

Dlatego otrzymujesz nieoczekiwane wyniki; cichy CAST jest tutaj standardową pułapką.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 400 zapytań SELECT do wypełnienia siatki php

  2. Jak mieć dynamiczny SQL w procedurze przechowywanej MySQL?

  3. Znalezienie następnego dostępnego identyfikatora w MySQL

  4. Uzyskiwanie różnicy czasu między dwoma czasami w PHP

  5. Zabezpieczanie php api do użycia w aplikacji na Androida