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

Comando MySQL para buscar CSV (o una matriz similar)

La forma correcta de manejar esto en SQL es agregar otra tabla para una propiedad de varios valores. Va en contra del modelo relacional almacenar múltiples valores discretos en una sola columna. Dado que está destinado a ser un no-no, hay poco soporte para él en el lenguaje SQL.

La única solución para encontrar un valor dado en una lista separada por comas es usar expresiones regulares, que en general son feas y lentas. Tienes que lidiar con casos extremos como cuando un valor puede o no estar al principio o al final de la cadena, así como al lado de una coma.

SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';

Hay otros tipos de consultas que son fáciles cuando tiene una tabla normalizada, pero difíciles con la lista separada por comas. El ejemplo que das, de buscar un valor que sea igual o mayor que los criterios de búsqueda, es uno de esos casos. Considere también:

  • ¿Cómo elimino un elemento de una lista separada por comas?
  • ¿Cómo me aseguro de que la lista esté ordenada?
  • ¿Cuál es el promedio de habitaciones?
  • ¿Cómo me aseguro de que los valores de la lista sean incluso entradas válidas? P.ej. ¿Qué me impide ingresar "1,2,banana"?

Si no desea crear una segunda tabla, piense en una forma de representar sus datos con un solo valor.

Más exactamente, debo decir que recomiendo que represente sus datos con un solo valor por columna , y la solución de Mike Atlas lo logra.