要为我的数据库自动完成逻辑,我需要查询数据库中的所有表,还需要查询每个表的单个请求列。
所以我们假设我有2个表:Table1
和T2
和Table1
有列:i d, type, size
和T2
来id, weight, length
。我需要像
[table1, id]
[table1, type]
[table1, size]
[T2, Id]
[T2, weight]
[T2, length]
如何通过单一查询获取此信息
答案 0 :(得分: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 :(得分: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;
我必须警告我没有足够多时间测试这第二个想法以保证很多,但它看起来效果很好。