sql >> Base de Datos >  >> RDS >> Mysql

Cómo buscar un valor separado por comas

Solución a corto plazo

Use la función FIND_IN_SET :

WHERE FIND_IN_SET('Queensland', csv_column)

... porque usar LIKE con comodines en cualquier extremo es arriesgado, dependiendo de cuántas coincidencias coincidan (y también garantiza un escaneo de la tabla). El rendimiento de LIKE con comodines en ambos lados está a la par con REGEXP, lo que significa que es malo.

Solución a largo plazo

No almacene valores separados por comas; use una relación adecuada de muchos a muchos, que involucre tres tablas:

Cosas

  • thing_id (clave principal)

Estados de Australia

  • State_id (clave principal)
  • Nombre_del_estado

Cosas_a_los_estados_de_Auz

  • thing_id (clave principal, clave externa a THINGS mesa)
  • State_id (clave principal, clave externa a AUSTRALIAN_STATES mesa)

Necesitará JOIN para obtener datos de las tres tablas, pero si quiere saber cosas como cuántos están asociados a un estado en particular, o dos estados en particular, es el modelo adecuado.