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

Rechercher une table entière dans mySQL pour une chaîne

Essayez quelque chose comme ceci :

SELECT * FROM clients WHERE CONCAT(field1, '', field2, '', fieldn) LIKE "%Mary%"

Vous voudrez peut-être consulter la documentation SQL pour plus d'informations sur les opérateurs de chaîne et les expressions régulières.

Modifier :il peut y avoir des problèmes avec les champs NULL, donc juste au cas où vous voudriez utiliser IFNULL(field_i, '') au lieu de simplement field_i

Respect de la casse  :Vous pouvez utiliser un classement insensible à la casse ou quelque chose comme ceci :

... WHERE LOWER(CONCAT(...)) LIKE LOWER("%Mary%")

Il suffit de rechercher dans tous les champs :Je crois qu'il n'y a aucun moyen de faire une requête SQL qui recherchera dans tous les champs sans déclarer explicitement le champ dans lequel effectuer la recherche. La raison en est qu'il existe une théorie des bases de données relationnelles et des règles strictes pour manipuler les données relationnelles (quelque chose comme l'algèbre relationnelle ou codd algèbre ; c'est de là que vient SQL), et la théorie n'autorise pas des choses telles que "rechercher simplement tous les champs". Bien sûr, le comportement réel dépend de la réalisation concrète du vendeur. Mais dans le cas courant, ce n'est pas possible. Pour vous en assurer, cochez SELECT syntaxe de l'opérateur (WHERE section, pour être précis).