选择所有但忽略重复项[重复]

Posted

技术标签:

【中文标题】选择所有但忽略重复项[重复]【英文标题】:Select all but ignore duplicates [duplicate] 【发布时间】:2014-04-25 22:38:20 【问题描述】:

我有一个 mysql 表,其中一个字段将包含重复项。我正在尝试选择所有但忽略此字段中存在重复的所有行。

因此,例如,如果我总共有 10 行,其中 3 行有重复,我想返回 8 行。 7 个是唯一的和 3 个重复项中的 1 个。

我尝试过 distinct 和 group by 都没有成功。他们忽略所有 3 个重复项。

这是我尝试过的:

SELECT *
FROM directory_listings
GROUP BY url
WHERE status = 'approved'
ORDER BY site_name ASC
LIMIT $start, $per_page

SELECT * DISTINCT url
FROM directory_listings
WHERE status = 'approved'
ORDER BY site_name ASC
LIMIT $start, $per_page

【问题讨论】:

为什么要返回 1 个重复项? 为了完整起见,我需要返回其中一个副本。如果我有记录 a、b、b、c、d,那么我想返回 a、b、c、d @Ruf1 所有列的重复值是否相同,还是只是某个列中的重复? @AlexW - 它只是“url”列,可能有重复 【参考方案1】:

@AlexW - 这只是 'url' 列可能有重复 - Ruf1 9 分钟前

如果您更正语法,那么您的第一个查询将起作用 - GROUP BY 必须遵循 WHERE(根据 the docs):

SELECT *
FROM directory_listings
WHERE status = 'approved'
GROUP BY url
ORDER BY site_name ASC

Here's an example of a working query in SQL Fiddle.

【讨论】:

完美运行,非常感谢。 我还需要一个类似的查询来确定唯一行的数量。这是正确的还是我使用组:“SELECT COUNT(DISTINCT url) FROM directory_listings WHERE status = 'approved'” 应该可以正常工作;另见***.com/q/4131937/2359271。如果您使用GROUP BY,您将获得每个组的单独计数(这对于查找重复项很有用,如this example!)【参考方案2】:

SELECT DISTINCT 的语法错误:

http://dev.mysql.com/doc/refman/5.6/en/select.html

另外,GROUP BY 不能消除重复的唯一原因是WHERE 子句取消了某些行的资格(即它们在statusurl 方面都不是重复的)。

【讨论】:

+1 表示关于 WHERE 子句的好点。通过明确给出正确的语法而不是仅链接文档,IMO 这个答案将得到很大改善。我知道当我开始使用 SQL 时,我发现文档中的语法描述非常混乱;并且外部链接可能不稳定。

以上是关于选择所有但忽略重复项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历列表并检索最小值的索引但忽略输出列表中的重复项?

django批量创建忽略重复项[重复]

使用 R 如何删除基于多列的重复项,但选择重复项的“最完整”版本

删除重复项后选择字典最小的字符串

使用流生成地图时忽略重复项

选择基于重复项的第一条记录[重复]