如何获取SQL中具有重复列组合的记录?


How can I get records that have a duplicate combination of columns in SQL?

本问题已经有最佳答案,请猛点这里访问。

如何才能获得具有重复列组合的记录? 例如,在下表中,我想获得具有ParentID和Date重复组合的记录。

1
2
3
4
5
6
7
+----+----------+-------------------------+
| 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 |
+----+----------+-------------------------+


这个问题的MySQL回答是由@juergen给出的,但这里是支持分析函数的任何数据库的选项:

1
2
3
4
5
6
7
SELECT ID, ParentID, DATE
FROM
(
    SELECT ID, ParentID, DATE, COUNT(*) OVER (PARTITION BY ParentID, DATE) cnt
    FROM yourTable
) t
WHERE t.cnt > 1;

通常,使用分析函数的上述方法可能优于传统的连接/聚合方法。 但是,这假设您的数据库支持上述查询。


内部选择获取具有重复项的记录的parentIDdate,外部选择获取包含id的cpmplete数据

1
2
3
4
5
6
7
8
9
10
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;