所以我试图获得在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是我的数据库)
问题是我得到两排
(客户,订单)
(订单,客户)
但我只想要其中一个。其中任何一个。
任何建议???
答案 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