如何从相同的 table 中获取重复的行

How to fetch duplicate rows from the same table

假设我有一个 table 比如:

ID valA valB valC
1 21 aaaaa NYC
4 12 bbbbb NYC
2 31 ddddd LA
2 23 eeeee LA
2 41 fffff NE
3 23 ggggg JE
3 44 hhhhh KA

我想比较行以找到具有特定数据匹配的行。在这种情况下,我想识别具有匹配 ID 和 valC 的行。 valA 和 valB 列的内容将被忽略。 所以,它应该只找到这两行:

ID valA valB valC
2 31 ddddd LA
2 23 eeeee LA

我尝试使用“count()”和“inner Join”进行一些操作,但没有得到我期望的结果。

我是 SQL 的新手,所以我将不胜感激任何提示和建议。

一种方法,使用解析函数:

WITH cte AS (
    SELECT t.*, COUNT(*) OVER (PARTITION BY ID, valC) cnt
    FROM yourTable t
)

SELECT ID, valA, valB, valC
FROM cte
WHERE cnt > 1;

通过过滤连续存储的 idvalc 的替代方法:

SELECT 
*
FROM table_name
WHERE id||valc in
    (SELECT 
           id||valc
     FROM 
           TABLE_NAME
     GROUP BY (id_, valc)
     HAVING count(1) > 1);