Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Comando MySQL para pesquisar CSV (ou array similar)


A maneira correta de lidar com isso no SQL é adicionar outra tabela para uma propriedade com vários valores. É contra o modelo relacional armazenar vários valores discretos em uma única coluna. Uma vez que se destina a ser um não-não, há pouco suporte para ele na linguagem SQL.

A única solução para encontrar um determinado valor em uma lista separada por vírgulas é usar expressões regulares, que em geral são feias e lentas. Você tem que lidar com casos extremos como quando um valor pode ou não estar no início ou no final da string, bem como ao lado de uma vírgula.
SELECT * FROM properties WHERE bedrooms RLIKE '[[:<:]]2[[:>:]]';

Existem outros tipos de consultas que são fáceis quando você tem uma tabela normalizada, mas difíceis com a lista separada por vírgulas. O exemplo que você dá, de buscar um valor igual ou maior que o critério de busca, é um desses casos. Considere também:
  • Como excluo um elemento de uma lista separada por vírgulas?
  • Como posso garantir que a lista esteja ordenada?
  • Qual ​​é o número médio de quartos?
  • Como posso garantir que os valores na lista sejam entradas válidas? Por exemplo. o que me impede de digitar "1,2,banana"?

Se você não quiser criar uma segunda tabela, crie uma maneira de representar seus dados com um único valor.

Mais precisamente, devo dizer que recomendo que você represente seus dados com um único valor por coluna , e a solução de Mike Atlas consegue isso.