2016-04-14 106 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