Je suis curieux, existe-t-il un bon moyen de rechercher toutes les colonnes pour une valeur donnée? Pour mes besoins, il n'a pas besoin d'être rapide du tout, c'est juste une chose unique, et je ne veux pas vraiment avoir à taper chaque nom de champ. C'est précisément ce que je vais faire pour l'instant, mais je pense qu'il y a sûrement une meilleure façon.
Je voudrais tourner ceci:
SELECT * FROM table WHERE col1 = 'val' OR col2 = 'val' OR col3 = 'val';
en cela:
SELECT * FROM table WHERE * = 'val'
... ou encore mieux (même si j'en doute sérieusement ...)
SELECT * FROM table WHERE * like '%val%'
J'ai trouvé cela , qui semble un peu proche, mais je ne trouve rien de plus proche:
SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...)
La différence étant, qui recherche une sélection de colonnes pour les valeurs spécifiées, alors que j'essaie de rechercher TOUTES les colonnes pour une seule valeur.
Ce n'est pas important cependant, comme je l'ai dit plus que tout, je suis juste curieux
Le plus vous pouvez vous rapprocher, en utilisant
IN
:Vous devez encore écrire toutes les colonnes que vous souhaitez vérifier.
Et ce n'est pas différent de l'
OR
expression que vous avez, pas en performance ou autrement. C'est juste une manière différente et équivalente d'écrire l'expression, avec un peu moins de caractères.la source
Vous devez le faire en deux étapes, générez d'abord le SQL comme (en supposant que votre table est nommée T dans le schéma S:
Vous pouvez maintenant exécuter cette chaîne. Notez que vous devez citer le «a» avec extra ». Si vous mettez cela par exemple dans une procédure, vous pouvez préparer et exécuter la chaîne qui a été générée.
J'ai testé avec:
La requête générée où:
et une exécution qui se traduit par:
la source
J'ai l'impression que ça fait un an que j'ai posé cette question, mais je suis juste tombé sur ce qui semble être exactement la chose que je cherchais! Ce n'est pas une instruction SQL, comme je l'avais prévu, mais elle fait ce que je voulais.
Dans MySQL Workbench, vous pouvez cliquer avec le bouton droit sur la table ou le schéma et choisir Rechercher les données de la table.
la source
Essaye celui-là:
Cela suppose qu'il n'y en a pas
.
dans votre chaîne de recherche. Si vous ne pouvez pas garantir cela, vous pouvez peut-être utiliser un «caractère de séparation» différent.la source
%
ou_
ou une colonne contient.
La solution la plus simple consiste à
Sauf si la valeur val est quelque chose qui est une occurrence courante dans la syntaxe sql.
la source
Essaye ça.
CONCAT () est utilisé pour séparer les valeurs de colonne comme ici, vous pouvez séparer votre colonne avec un espace pour spécifier le meilleur résultat à l'intérieur de la fonction et vérifier la valeur également la chaîne séparée avec de l'espace et le résultat est entre vos mains.
la source
C'est possible en utilisant la base de données information_schema, nous allons simplement lister toutes les colonnes d'une table spécifique puis utiliser GROUP_CONCAT pour les lister en une seule ligne puis les alimenter dans une instruction IN.
Cela ne retournera une ligne que si «valeur» est présente dans toutes les colonnes.
la source
if 'value' is present in any of the columns
? De plus, vous pouvez ajouter un prédicat pour les types de chaînes comme: `et DATA_TYPE IN ('char', 'varchar')`where 'value' in ('col1,col2,col3…')
.