【发布时间】:2020-02-12 07:06:39
【问题描述】:
我收到了一个包含 500 多个表的新数据库。我可以使用 INFORMATION_SCHEMA 执行查询以列出所有表并在数据库中的所有表中识别那些相同的命名列。所以本质上我想要一个所有表的列表,并标识那些具有通用命名列的表。
【问题讨论】:
我收到了一个包含 500 多个表的新数据库。我可以使用 INFORMATION_SCHEMA 执行查询以列出所有表并在数据库中的所有表中识别那些相同的命名列。所以本质上我想要一个所有表的列表,并标识那些具有通用命名列的表。
【问题讨论】:
你可以self-join系统查看information_schema.columns:
select
ta.column_name,
ta.table_name,
tb.table_name,
from information_schema.columns ta
inner join information_schema.columns tb
on ta.column_name = tb.column_name
and ta.table_name != tb.table_name
order by
ta.column_name,
ta.table_name,
tb.table_name
这将为您提供在多个表中使用的所有列以及相应的表名。
如果你只想要表名,那么:
select ta.table_name, tb.table_name
from information_schema.columns ta
inner join information_schema.columns tb
on ta.column_name = tb.column_name
and ta.table_name != tb.table_name
group by ta.table_name, tb.table_name
order by ta.table_name, tb.table_name
注意:您可能希望在 table_schema 上添加一个过滤器,以将查询限制为您的应用程序中使用的架构。
【讨论】: