2015-08-12 2 views
2

Я новичок в MySQL, и мне трудно понять, как обращаться к нескольким базам данных.MySQL Поиск значения для нескольких баз данных

Объясняя инфраструктуру, я в настоящее время работаю над назначением, где я нахожусь в публичной тестовой базе данных, содержащей коллекцию баз данных.

У меня есть значение идентификатора, которое я хочу найти во всех базах данных, которые, как я знаю, существуют в конкретной таблице. В этом примере я использую имя таблицы «table1». Проблема в том, что не все базы данных имеют столбец идентификатора, который я ищу в таблице.

Мой вопрос состоит из двух частей: -Как я искать все базы данных, чтобы вернуть коллекцию всех имен баз данных, которые содержат определенное значение в этой колонке (table1.id) -Как проверить, что столбец существует, так что я действительно могу выполнить проверку, чтобы проверить, соответствует ли идентификатор, который я ищу, для значения table1.id других баз данных?

В меньших масштабах, я разработал код для проверки индивидуальной таблицы:

SELECT * FROM table1 
WHERE searchId = db1.table1.id; 

Разница заключается в том, что я хочу, чтобы найти все TABLE1 баз данных для этого конкретного значения в то время как гарантии того, что этот столбец существует в таблице.

+0

Вы находитесь в открытой базе данных испытаний, содержащей коллекцию баз данных. Что именно вы подразумеваете под этим? – Benvorth

+0

Я использую базу данных, которая содержит в себе несколько баз данных, то есть: DB1 db2 db3 ... Затем в каждой из баз данных, есть набор таблиц, которые не обязательно совпадают с другими базами данных , – dpark

+0

Вы имеете в виду схемы? В MySQL это одно и то же ... См. Здесь: http://stackoverflow.com/questions/11618277/difference-between-schema-database-in-mysql – Benvorth

ответ

1

Это поможет вам начать:

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

Исходя из этого, вы можете использовать результаты в любом программировании язык, который вы используете для составления запросов, специфичных для каждой из этих баз данных.

В качестве альтернативы, я обнаружил пограничные злоупотребления, похожие на эту помощь в последнее время.

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

Вы конкатенации результаты этого вместе с UNION между ними, и полученный запрос должен дать вам список всех схем, которые имеют таблицы с таким именем (и столбец), значение которого соответствует searchId.

Редактировать: Заменены несоответствующие обратные ссылки выше с помощью одиночных кавычек и ... добавлено это ниже.

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

Простите мое отсутствие знаний о синтаксисе, но, учитывая ваш второй блок кодирования где вы упоминаете «searchId» Если бы я хотел выполнить поиск по всем базам данных, которые выводятся в результате вашего первого блока кодирования для идентификатора, такого как «RNASEQG00000000001». Как бы включить его во второй блок кодирования сделать поиск? – dpark

+0

Просто измените '' WHERE ', column_name, "=", searchId' на 'WHERE", column_name, "=' RNASEQG00000000001 '" ' – Uueerdo

+0

@dpark см. Edit для более универсального решения с двумя утверждениями. – Uueerdo

1

Вы можете получить столбцы таблицы в MySQL с помощью querieing в information_schema:

SELECT column_name 
FROM information_schema.columns 
WHERE table_schema = 'myschema' -- "database" 
AND table_name ='mytablename' 
Смежные вопросы