Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Suche nach Werten in mehreren Datenbanken

Dies sollte Ihnen den Einstieg erleichtern:

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

Daraus können Sie die Ergebnisse in jeder Programmiersprache verwenden, die Sie verwenden, um Abfragen zu erstellen, die für jede dieser Datenbanken spezifisch sind.

Alternativ fand ich in letzter Zeit ähnlich grenzwertige Missbräuche hilfreich.

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

Die Ergebnisse davon verketten Sie mit UNION between, und die resultierende Abfrage sollte Ihnen eine Liste aller Schemas geben, die eine Tabelle mit diesem Namen (und dieser Spalte) haben, deren Wert mit searchId übereinstimmt.

Bearbeiten:Ersetzte unangemessene Backticks oben durch einfache Anführungszeichen und ... fügte dies unten hinzu.

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