查找“部分”重复内容

时间:2013-12-05 20:09:13

标签: mysql sql

如何找到“部分”重复内容? 我的链接没有正确更新,我留下了两个相似的链接,而不是一个,只有子域不同。

例如:

link1: domain-1.com/file_path
links2 domain-2.com/file_path

我想在file列中找到“file_path”重复的所有链接。

我尝试了什么:

SELECT file, COUNT( * ) c
FROM my_table
GROUP BY file HAVING c >1

2 个答案:

答案 0 :(得分:1)

您的查询几乎是正确的,但您希望更新HAVING子句以实际反映您的需求。

我认为最好的方法是使用REGEX,但我认为这也适用于简单的查询: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index

如果您确定只有一个/,那么这将很容易。即:

SELECT myfile, COUNT(*) c
FROM my_table
GROUP BY myfile HAVING SUBSTRING_INDEX(myfile, '/', -1);

我还没有对该查询进行测试,因此不能100%确定它是否有效且我已将file替换为myfile,因为FILE似乎是保留关键字,虽然我不知道它是否真的很重要。

答案 1 :(得分:1)

试试这个:

SELECT COUNT(SUBSTRING_INDEX(file, '.com', -1)) as "c", 
SUBSTRING_INDEX(file, '.com', -1) as "f" 
FROM mytable 
GROUP BY f HAVING c > 1

其中f是重复的文件名,c是出现次数。

要获取您可以尝试的所有链接的列表:

    SELECT m.file from mytable as "m" 
    WHERE SUBSTRING_INDEX(m.file, '.com', -1) IN (
        SELECT SUBSTRING_INDEX(m2.file, '.com', -1) as "f" 
        FROM mytable as "m2"
        GROUP BY f HAVING COUNT(SUBSTRING_INDEX(m2.file, '.com', -1)) > 1
        )