2017-03-27 25 views
1

所以我試圖得到任何具有相同名稱和相同數據類型的屬性在MYSQL中的任何表對。重複2列

SELECT distinct a.table_name,b.table_name FROM INFORMATION_SCHEMA.COLUMNS a 
JOIN INFORMATION_SCHEMA.COLUMNS b on a.column_name=b.column_name 
and a.data_type=b.data_type 
WHERE a.table_schema='Online_food' 
and b.table_schema='Online_food' 
and a.table_name<>b.table_name 

(Online_Food是我的數據庫)

的問題是我收到的兩行
(客戶,訂單)
(訂單,客戶)

但我想只是其中之一。他們中的任何一個。
任何建議???

回答

0

如果要排除搜索的一半,你可以這樣做:

SELECT distinct a.table_name, b.table_name 
FROM INFORMATION_SCHEMA.COLUMNS a 
JOIN INFORMATION_SCHEMA.COLUMNS b ON a.column_name = b.column_name 
AND a.data_type = b.data_type 
WHERE a.table_schema = 'Online_food' 
AND b.table_schema = 'Online_food' 
AND STRCMP(a.table_name,b.table_name) > 0 

通過選擇那些結果,其中一個表名,字母數字,比其他的表名大,你要確保只有0.5*n*n-n比較是完成,其中n是表的數量。

+0

工作就像我想它。謝謝。 –

0

您可以對結果進行排序。如果您更改條件

a.table_name<>b.table_name 

a.table_name < b.table_name 

那麼只有結果之一將返回:

SELECT DISTINCT a.table_name,b.table_name 
FROM INFORMATION_SCHEMA.COLUMNS a 
    JOIN INFORMATION_SCHEMA.COLUMNS b 
    ON a.column_name = b.column_name 
     AND a.data_type = b.data_type 
     AND a.table_schema = b.table_schema 
WHERE a.table_schema = 'Online_food' 
    AND a.table_name < b.table_name 
+0

太簡單了。謝謝。 –