Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Alla ricerca di valore in più database

Questo dovrebbe iniziare:

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

Da questo, puoi utilizzare i risultati in qualsiasi linguaggio di programmazione che stai utilizzando per comporre query specifiche per ciascuno di quei database.

In alternativa, ultimamente ho trovato utili abusi borderline simili a questo.

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'
;

Concateni i risultati di questo insieme, con UNION tra e la query risultante dovrebbe darti un elenco di tutti gli schemi che hanno una tabella con quel nome (e colonna) il cui valore corrisponde a searchId.

Modifica:sostituiti i backtick inappropriati sopra con virgolette singole e... aggiunto sotto.

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'
;