我想在MySQL数据库中找到一些重复记录,具体取决于以下标准:
例如,有两条记录:
Example text here 123 I am a news 1 duplicate text from any one
Example text here 123 I am a news 1 duplicate text from any two
我尝试了以下内容,但它只返回完整的标题列匹配:
SELECT title, COUNT(*) c FROM news_contents GROUP BY title HAVING c > 1
如果前5个单词相同,我想要的是返回记录,例如上面的示例2记录:Example text here 123 I
...
我试过这样的事情:
SELECT
title,
COUNT(*) c
FROM
news_contents
WHERE
news_contents.title LIKE CONCAT(
SUBSTRING_INDEX(news_contents.title, ' ', 4),
'%'
)
GROUP BY
title
HAVING
c > 1
但上面是没有按预期返回结果,也许我错过了什么?我搜索了很多,但找不到任何东西。
答案 0 :(得分:1)
可能正在寻找类似这样的东西,您可以通过获取前5个字符进行分组,然后将其与您的表格进行比较以获得所有匹配的记录。
SELECT LEFT(title,5) N, COUNT(*) C FROM news_contents GROUP BY LEFT(title,5) having COUNT(*) > 1
然后,为了获取您的数据,您可以将此结果与您的表格内连接:
SELECT * FROM news_content nc INNER JOIN (SELECT LEFT(title,5) N, COUNT(*) C FROM news_contents GROUP BY LEFT(title,5) having COUNT(*) > 1) NewsFiltered ON nc.title LIKE NewsFiltered.N + '%'
它可能不是最有效的答案,但它确实有效。
答案 1 :(得分:1)
按标题分组不会起作用。如果要计算重复项,则需要按子串计数,如下所示:
SELECT CONCAT( SUBSTRING_INDEX(title, ' ', 4)) as pt, COUNT(*) c
FROM news_contents
WHERE title LIKE CONCAT( SUBSTRING_INDEX(title, ' ', 4), '%')
GROUP BY pt HAVING c > 1
但是这不会给你每个重复的故事。为此,你需要做这样的事情:
SELECT news_contents.title FROM
(SELECT CONCAT( SUBSTRING_INDEX(title, ' ', 4)) as pt, COUNT(*) c
FROM news_contents
WHERE title LIKE CONCAT( SUBSTRING_INDEX(title, ' ', 4), '%')
GROUP BY pt HAVING c > 1) d, stories
WHERE news_contents.title LIKE CONCAT(d.partial_title, '%')
并且它会给出每个符合&#34的重复条目的每个确切标题;前四个单词是相同的"标准。