2016-04-14 111 views
1

我有81桌,我要找到匹配的列和输出就像一个列表:查找所有表匹配列

"columnName" found in 3 tables: 
table1 
table2 
table3 

"columnName2" found in 4 tables: 
table1 
table3 
table4 
table5 
+0

答案很可能是平台特定。请指定您使用的平台。 –

+0

我正在使用phpMyAdmin。 只是为了更清楚一点,我不在寻找任何特定的列,只有任何_columns_可以在2个或更多的表中找到。 –

+0

phpMyAdmin是一个管理MySQL或MariaDB数据库的应用程序;它不是数据库平台本身。可能你正在使用其中之一;您可以看到主phpMyAdmin页面中的哪一个和版本信息(右侧有数据库服务器,PHP和Web服务器的许多版本信息)。 –

回答

0

INFORMATION_SCHEMA.COLUMNS是包含所有表中的所有列的系统表。您可以通过选择它来查看它。

对于你的问题,你应该试试这个:

select I.Column_name, 
table_name, 
table_count 
from INFORMATION_SCHEMA.COLUMNS I 
inner join 
(
Select Column_name, 
count(*) as table_count 
from INFORMATION_SCHEMA.COLUMNS 
group by Column_name) as T on T.Column_name = I.Column_name 

你将有一个表,每个列名,表和列table_count计数。

我ust不知道如何输出一个列表。你应该把它放在excel然后如果你想格式化我猜..

告诉我,如果你有问题!

0

查询下面应该给你想要的结果。如果您遇到任何问题,请告诉我。如果你想具体介绍一下单个数据库您可以修改脚本

此查询为您提供列名 - 串连表名 - 表数这里

SELECT t.CNAME AS ColumnName, STUFF(
(SELECT ',' + S.TNAME 
FROM 
(
    SELECT C.NAME AS CNAME , T.NAME AS TNAME 
    FROM SYS.OBJECTS AS T 
    JOIN SYS.COLUMNS AS C 
    ON T.OBJECT_ID=C.OBJECT_ID 
    WHERE T.TYPE_DESC='USER_TABLE' 
)s 
WHERE s.CNAME = t.CNAME 
FOR XML PATH('')),1,1,'') AS TablesUsed, 
COUNT(t.TNAME) 
FROM 
(
    SELECT C.NAME AS CNAME , T.NAME AS TNAME 
    FROM SYS.OBJECTS AS T 
    JOIN SYS.COLUMNS AS C 
    ON T.OBJECT_ID=C.OBJECT_ID 
    WHERE T.TYPE_DESC='USER_TABLE' 
)t 
GROUP BY t.CNAME 
HAVING COUNT(t.TNAME) > 1 
ORDER BY COUNT(t.TNAME) DESC