重复超过2列

时间:2017-03-27 09:02:36

标签: mysql duplicates

所以我试图获得在MYSQL中具有相同名称和相同数据类型的属性的任何表对。

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是我的数据库)

问题是我得到两排
(客户,订单)
(订单,客户)

但我只想要其中一个。其中任何一个。
任何建议???

2 个答案:

答案 0 :(得分: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是表的数量。

答案 1 :(得分: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