如何找到“部分”重复内容? 我的链接没有正确更新,我留下了两个相似的链接,而不是一个,只有子域不同。
例如:
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
答案 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
)