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

MySQL Recherche de valeur sur plusieurs bases de données

Cela devrait vous aider à démarrer :

SELECT table_schema 
FROM information_schema.columns 
WHERE table_name = 'table1' AND column_name = 'id'
;

À partir de là, vous pouvez utiliser les résultats dans le langage de programmation que vous utilisez pour composer des requêtes spécifiques à chacune de ces bases de données.

Alternativement, j'ai trouvé des abus limites similaires à celui-ci ces derniers temps.

SELECT CONCAT("SELECT '", table_schema, "' "
              "FROM `", table_schema, "`.`", table_name, "` "
              "WHERE `", column_name, "` = ", searchId
       ) AS qStr
FROM information_schema.columns 
WHERE table_name = 'table1' AND column_name = 'id'
;

Vous concaténez les résultats de ceci ensemble, avec UNION entre, et la requête résultante devrait vous donner une liste de tous les schémas qui ont une table avec ce nom (et cette colonne) dont la valeur correspond à searchId.

Modifier :Remplacé les backticks inappropriés ci-dessus par des guillemets simples, et... ajouté ceci ci-dessous.

SET @criteriaVal := "'somestring'";
-- SET @criteriaVal := 3; -- for example

SELECT CONCAT("SELECT '", table_schema, "' "
              "FROM `", table_schema, "`.`", table_name, "` "
              "WHERE `", column_name, "` = ", @criteriaVal
       ) AS qStr
FROM information_schema.columns 
WHERE table_name = 'table1' AND column_name = 'id'
;