SQL перечисляет все таблицы с определенными именами столбцов

Я хотел бы сделать SQL-запрос к серверу MySQL 5.6, чтобы вернуть мне все таблицы, содержащие ПО КРАЙНЕЙ МЕРЕ следующие имена столбцов:

field1 
field2

Я видел примеры здесь, но они охватывают только одно имя столбца или одно из многих возможных.

Например, если у меня есть эти 4 таблицы:

TABLE1
field1 field2 field3

TABLE2
field2 field4

TABLE3
field1 field3

TABLE4
field1 field2

Поскольку я запрашиваю таблицы, которые имеют КАК МИНИМУМ "поле1" И "поле2", результат должен быть:

TABLE1
TABLE4

Я попытался выполнить самосоединение с таблицей INFORMATION_SCHEMA.COLUMNS, но не могу сделать это правильно...

Спасибо за вашу помощь


person Imanol Barba Sabariego    schedule 30.04.2015    source источник
comment
См. stackoverflow.com/questions/193780/   -  person Alex    schedule 30.04.2015
comment
Это неправильно, потому что он покажет те, у кого поле1 ИЛИ поле2, и я хочу их обоих. я уже проверял раньше   -  person Imanol Barba Sabariego    schedule 30.04.2015


Ответы (2)


Попробуй это:

SELECT DISTINCT T1.TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS T1
INNER JOIN INFORMATION_SCHEMA.COLUMNS T2 ON(T1.TABLE_NAME = T2.TABLE_NAME)
WHERE T1.COLUMN_NAME = 'field1'
AND T2.COLUMN_NAME = 'field2'

Примечание: код был написан непосредственно здесь, а не тестировался.

person Zohar Peled    schedule 30.04.2015
comment
Ах ты прав! Я сделал это, но забыл указать T1 в SELECT DISTINCT T1.TABLE_NAME :_D Спасибо!!! - person Imanol Barba Sabariego; 30.04.2015
comment
Небольшая опечатка в T2..COLUMN_NAME. - person Imanol Barba Sabariego; 30.04.2015

Использовать это:

SELECT DISTINCT TABLE_NAME
FROM information_schema.COLUMNS 
WHERE COLUMN_NAME = 'field1' OR COLUMN_NAME = 'field2'

Это должно возвращать КАЖДОЕ имя таблицы, в которой есть столбец с именем «поле1» или «поле2».

person Filipe Paulo    schedule 30.04.2015
comment
OP хочет, чтобы каждая таблица имела оба столбца, а не любой столбец. - person Eilidh; 30.04.2015