【问题标题】:INFORMATION_SCHEMA: can this be used to find all the same named columns in all tables in same databaseINFORMATION_SCHEMA:这可用于在同一数据库中的所有表中查找所有相同命名的列
【发布时间】:2020-02-12 07:06:39
【问题描述】:

我收到了一个包含 500 多个表的新数据库。我可以使用 INFORMATION_SCHEMA 执行查询以列出所有表并在数据库中的所有表中识别那些相同的命名列。所以本质上我想要一个所有表的列表,并标识那些具有通用命名列的表。

【问题讨论】:

  • 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,不是特定数据库产品的名称,而且不同供应商之间的 information_schema 也不相同。请为您正在使用的数据库产品添加tag

标签: sql information-schema


【解决方案1】:

你可以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 上添加一个过滤器,以将查询限制为您的应用程序中使用的架构。

【讨论】:

  • 谢谢,但我能否从 INFORMATION_SCHEMA 中获取表的大小(行数),或者我是否可以单独查询每个表?
猜你喜欢
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 2011-02-13
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多