Mysql查询以查找接近重复的URL

Mysql查询以查找接近重复的URL,mysql,subquery,Mysql,Subquery,我试图消除mysql数据库表中的重复域名(URL) 我使用此查询查找“相同”URL: 但此查询无法找到相同域的不同URL,这正是我所需要的: example.com www.example.com www.example.com/ www.example.com/somepage.htm 任何帮助都将不胜感激。您可以非常轻松地处理最后三个案例: select min(url), count(*) as c from links group by substring_index(url, '/'

我试图消除mysql数据库表中的重复域名(URL)

我使用此查询查找“相同”URL:

但此查询无法找到相同域的不同URL,这正是我所需要的:

example.com
www.example.com
www.example.com/
www.example.com/somepage.htm

任何帮助都将不胜感激。

您可以非常轻松地处理最后三个案例:

select min(url), count(*) as c
from links
group by substring_index(url, '/', 1)
having c > 1;
要获得第一个,我建议删除字符串开头的
www.
。以下操作应该可以正常工作(但如果
.www
在url中第一个
/
之前出现,则会失败):


它为这个url:09汽车示例返回了很多值。com@JamieGallicchio . . . 杰米,这个答案遵循你在问题中指定的规则。如果你的例子真的更复杂,我建议你用更详细的例子问另一个问题。如果你编辑这个问题,你将使我的答案无效,因为我的答案可能会引起反对票。事实上,你的回答并没有返回相同的域名。理论上,它看起来应该可以工作,但它无法返回任何类似的域。实际上,它把它们分成两组。它甚至不会过滤掉相同的域名,其中一个以/结尾,另一个只在域扩展中。唯一可能影响这一点的是,数据库中的所有URL都以http://开头。谢谢你的尝试。@JamieGallicchio。如果数据与您的问题不同,那么结果可能不成立。尝试对您给出的示例运行查询。如果名称以http://开头,则子字符串索引的参数可能应该是3而不是1。
select min(url), count(*) as c
from links
group by substring_index(url, '/', 1)
having c > 1;
select min(url), count(*) as c
from links
group by (case when url like 'www.%' then substring(substring_index(url, '/', 1), 5)
               else substring_index(url, '/', 1)
           end)
having c > 1;