Mysql
 sql >> Base de données >  >> RDS >> Mysql

Commande MySQL pour rechercher CSV (ou tableau similaire)

La bonne façon de gérer cela dans SQL consiste à ajouter une autre table pour une propriété à valeurs multiples. C'est contre le modèle relationnel de stocker plusieurs valeurs discrètes dans une seule colonne. Puisqu'il est censé être un non-non, il y a peu de support pour cela dans le langage SQL.

La seule solution pour trouver une valeur donnée dans une liste séparée par des virgules est d'utiliser des expressions régulières, qui sont en général laides et lentes. Vous devez faire face à des cas extrêmes comme lorsqu'une valeur peut ou non être au début ou à la fin de la chaîne, ainsi qu'à côté d'une virgule.

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

Il existe d'autres types de requêtes qui sont faciles lorsque vous avez une table normalisée, mais difficiles avec la liste séparée par des virgules. L'exemple que vous donnez, la recherche d'une valeur égale ou supérieure aux critères de recherche, en est un exemple. Considérez également :

  • Comment supprimer un élément d'une liste séparée par des virgules ?
  • Comment puis-je m'assurer que la liste est triée ?
  • Quel est le nombre moyen de chambres ?
  • Comment puis-je m'assurer que les valeurs de la liste sont même des entrées valides ? Par exemple. qu'est-ce qui m'empêche d'entrer "1,2, banane" ?

Si vous ne souhaitez pas créer une deuxième table, trouvez un moyen de représenter vos données avec une seule valeur.

Plus précisément, je devrais dire que je vous recommande de représenter vos données avec une seule valeur par colonne , et la solution de Mike Atlas y parvient.