我有81桌,我要找到匹配的列和输出就像一个列表:查找所有表匹配列
"columnName" found in 3 tables:
table1
table2
table3
"columnName2" found in 4 tables:
table1
table3
table4
table5
我有81桌,我要找到匹配的列和输出就像一个列表:查找所有表匹配列
"columnName" found in 3 tables:
table1
table2
table3
"columnName2" found in 4 tables:
table1
table3
table4
table5
表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然后如果你想格式化我猜..
告诉我,如果你有问题!
查询下面应该给你想要的结果。如果您遇到任何问题,请告诉我。如果你想具体介绍一下单个数据库您可以修改脚本
此查询为您提供列名 - 串连表名 - 表数这里
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
答案很可能是平台特定。请指定您使用的平台。 –
我正在使用phpMyAdmin。 只是为了更清楚一点,我不在寻找任何特定的列,只有任何_columns_可以在2个或更多的表中找到。 –
phpMyAdmin是一个管理MySQL或MariaDB数据库的应用程序;它不是数据库平台本身。可能你正在使用其中之一;您可以看到主phpMyAdmin页面中的哪一个和版本信息(右侧有数据库服务器,PHP和Web服务器的许多版本信息)。 –