2015-12-01 2 views
1

Для автоматической полной логики для моего db Мне нужно запросить все таблицы в базе данных, а также список столбцов для каждой таблицы с одним запросом.MYSQL: получить все таблицы и таблицы этих таблиц

Так Давайте предположим, что у меня есть 2 таблицы: Table1 и T2 и Table1 имеют столбцы: я d, type, size и T2, чтобы иметь id, weight, length. И мне нужно что-то вроде

[table1, id] 
[table1, type] 
[table1, size] 
[T2, Id] 
[T2, weight] 
[T2, length] 

Как можно получить эту информацию с одного запроса

+0

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

+0

«Не работает» не помогает нам понять, что происходит. Что вы ожидаете (или хотите) получить и что получаете? – Becuzz

+0

Это недопустимый sql-запрос. –

ответ

2

Я думаю, что это должно быть ответом на вопрос:

select T.Table_name, C.column_name from information_schema.Tables AS T 
LEFT JOIN information_schema.COLUMNS as C 
ON T.Table_name = C.Table_name 
where T.TABLE_SCHEMA = <YOUR_SCHEMA (name of db)> 
order by C.ordinal_position 
1

Если у вас есть доступ для запроса INFORMATION_SCHEMA, вы можете сделать это следующим образом:

SELECT TABLE_NAME, COLUMN_NAME 
FROM information_schema.columns 
WHERE TABLE_SCHEMA='<name_of_your_schema>' 

И , вы также можете пойти глубже и получить их заказами по зависимости от внешнего ключа:

SELECT col.TABLE_NAME, col.COLUMN_NAME 
FROM information_schema.columns col 
LEFT JOIN information_schema.key_column_usage kcu 
    ON col.COLUMN_NAME=kcu.COLUMN_NAME 
RIGHT JOIN information_schema.tables t 
    ON t.TABLE_NAME=kcu.TABLE_NAME 
WHERE col.TABLE_SCHEMA='<name_of_your_schema>' GROUP BY t.TABLE_NAME ORDER BY t.TABLE_TYPE DESC, COUNT(kcu.REFERENCED_COLUMN_NAME) ASC; 

I hav e, чтобы предупредить, что я не испытывал эту вторую мысль достаточно долго, чтобы гарантировать много, но, похоже, она работает неплохо.

Смежные вопросы