如何获取在 SQL 中具有重复列组合的记录? [复制]
Posted
技术标签:
【中文标题】如何获取在 SQL 中具有重复列组合的记录? [复制]【英文标题】:How can I get records that have a duplicate combination of columns in SQL? [duplicate] 【发布时间】:2018-11-13 11:04:11 【问题描述】:如何只获取具有重复列组合的记录?例如,在下表中,我想获取具有 ParentID 和 Date 的重复组合的记录。
+----+----------+-------------------------+
| ID | ParentID | Date |
+----+----------+-------------------------+
| 1 | 225 | 2018-05-10 00:00:00.000 |
| 2 | 225 | 2018-05-10 00:00:00.000 |
| 3 | 300 | 2019-25-11 00:00:00.000 |
+----+----------+-------------------------+
【问题讨论】:
您确定已经尝试过查询吗? 这个问题在这个网站上被问了十亿次***.com/questions/2594829/… 另外,您使用的是哪个数据库? 添加更多样本数据,并指定预期结果。 @Nerevar - 也许我没有使用正确的词来搜索!这正是我想要的。谢谢! 【参考方案1】:内部选择获取有重复记录的parentID
和date
,外部选择获取包含id
的完整数据
SELECT t1.*
FROM your_table t1
INNER JOIN
(
SELECT parentId, date
FROM your_table
GROUP BY parentId, date
HAVING COUNT(*) > 1
) t2
ON t1.parentId = t2.parentId AND t1.date = t2.date;
【讨论】:
【参考方案2】:@juergen 给出了 mysql 对这个问题的回答,但这里是任何支持分析函数的数据库的选项:
SELECT ID, ParentID, Date
FROM
(
SELECT ID, ParentID, Date, COUNT(*) OVER (PARTITION BY ParentID, Date) cnt
FROM yourTable
) t
WHERE t.cnt > 1;
一般来说,上述使用分析函数的方法可能会优于传统的连接/聚合方法。但是,这假设您的数据库支持上述查询。
【讨论】:
您的回答似乎表明,MySQL 不支持这一点。真的是这样吗?我以为 MySQL 8.0.2 引入了窗口函数。 @MichaWiedenmann 是的,确实如此。但是很少有人在生产中使用这个版本(我什至不知道它是否可用,例如通过 RDS)。因此,大多数 MySQL 问题都假设版本早于 8。 如果你能改写你的答案,即使在使用 MySQL 时,仓促的复制阅读器也会默认使用分析函数,我会很高兴。恕我直言,这是更好的默认情况。以上是关于如何获取在 SQL 中具有重复列组合的记录? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
mysql - 为每组分组的 SQL 结果获取具有最大值的记录[重复]