如何选择除原始行之外的所有重复行?

Cab*_*ero 2 sql postgresql duplicates

假设我有一张桌子

CREATE TABLE names (
    id SERIAL PRIMARY KEY,
    name CHARACTER VARYING
);
Run Code Online (Sandbox Code Playgroud)

有数据

id    name
-------------
1     John
2     John
3     John
4     Jane
5     Jane
6     Jane
Run Code Online (Sandbox Code Playgroud)

我需要选择name除原始行之外的所有重复行。所以在这种情况下我需要的结果是这样的:

id    name
-------------
2     John
3     John
5     Jane
6     Jane
Run Code Online (Sandbox Code Playgroud)

我如何在 Postgresql 中做到这一点?

Aar*_*etz 5

您可以用来ROW_NUMBER()识别“原始”记录并将其过滤掉。这是使用cte 的方法:

with Nums AS (SELECT id, 
                     name, 
                     ROW_NUMBER() over (PARTITION BY name ORDER BY ID ASC) RN
              FROM names)

SELECT *
FROM Nums
WHERE RN <> 1 --Filter out rows numbered 1, 'originals'
Run Code Online (Sandbox Code Playgroud)