我有一个表,该表具有名为article_title的列。假设表名称为articles。我需要找出多个记录中article_title数据相同的记录。

这就是我得到的:

select a.* 
from articles a 
where a.article_title = (select article_title 
                         from articles 
                         where article_title = a.article_title 
                         AND a.id <> articles.id)


#1 楼

HAVING是一个很棒的聚合筛选器。 (http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html)例如,选择出现次数大于的article_titles:

SELECT count(*), article_title
FROM articles
GROUP BY article_title
HAVING COUNT(*) > 1;


在SELECT和GROUP BY子句中添加列使您可以基于多个列的组合键来查找重复项。

评论


@jkushner:但要注意MySQL的GROUP BY实现中的怪癖(或某些人可能会发现的错误):mysqlperformanceblog.com/2006/09/06/…

– a_horse_with_no_name
13年11月30日在8:44

#2 楼

您的问题可以通过以下查询解决:

SELECT *
FROM article
WHERE article_title IN (SELECT *
                        FROM (SELECT article_title
                              FROM article
                              GROUP BY article_title
                              HAVING COUNT(article_title) > 1)
                        AS a);


评论


这是正确的答案,因为它实际上返回包含重复项的行

–etayluz
18/12/5在19:00

#3 楼


有一个表,该表的列名为article_title。假设
表名是article。我需要找出多个记录中
article_title数据相同的记录。


听起来像我,您还需要具有ID,因为查找基于article_title的记录,因为您有重复项

使用GROUP BY的基本最小/最大值(如果重复超过2个,您将错过id) br />或返回非正规化以为LIFO ID(旧ID重复生成)生成CSV,但您知道所有ID在这里。.