选择列在多个记录中包含相同数据的行

som*_*ser 36 mysql duplication

我有一个表,其中有一列名为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)
Run Code Online (Sandbox Code Playgroud)

小智 41

HAVING 是一个很棒的聚合过滤器。( http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html ) 例如,选择超过出现的文章标题:

SELECT count(*), article_title
FROM articles
GROUP BY article_title
HAVING COUNT(*) > 1;
Run Code Online (Sandbox Code Playgroud)

将列添加到 SELECT 和 GROUP BY 子句允许您根据多列的组合键定位重复项。

  • @jkushner:但要注意 MySQL 的“GROUP BY”实现中的怪癖(或某些人可能会看到的错误):http://www.mysqlperformanceblog.com/2006/09/06/wrong-group-by-makes-你的查询脆弱/ (2认同)

小智 12

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

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);
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,因为它实际上返回具有重复项的行 (2认同)