如何删除postgresql中的重复行

问题描述 投票:0回答:1

我想从表 nashvillehousing 中删除重复的行。但是,当我尝试使用 CTE 并删除重复行时,它不起作用,并且我得到“关系 cte 不存在”,SQL 状态:42P01。 我在这个项目中使用 postgresql,这是我按照 #Alex The Analyst 进行的。如何删除 postgresql 中的重复行? 这是我正在编写的代码和我收到的错误的屏幕截图,{这是我收到的错误消息} (https://i.sstatic.net/0NUOJeCY.png)

我尝试使用 uniqueid 作为重复行的标识符,然后使用 EXCEPT 和 DELETE 语句删除重复行,某些行已被删除,但我不确定这是否是正确的解决方案。 下面是我使用的代码。 此代码选择 uniqueid。

选择唯一ID 从 纳什维尔housing1 除外(选择最大(唯一ID) 从 纳什维尔housing1 按属性地址分组)

我使用下面的代码删除了多次出现的行..

从 nashvillehousing1 中删除 WHERE uniqueid IN (SELECT uniqueid 从 纳什维尔housing1 除外(选择最大(唯一ID) 从 纳什维尔housing1 按属性分组))

此代码有效,但我不确定这是否是识别重复行并删除它们的正确方法。 请帮忙。

postgresql duplicates common-table-expression data-cleaning sql-delete
1个回答
0
投票

您可以像这样使用 CTE 和窗口函数:

WITH duplicates AS (
SELECT
    uniqueid ,
    ROW_NUMBER() OVER (PARTITION BY propertyaddress ORDER BY ctid) AS rn
FROM
    nashvillehousing1 
 )
DELETE FROM nashvillehousing1 
WHERE uniqueid IN (
SELECT uniqueid 
FROM duplicates
WHERE rn > 1
);

窗口函数为每个重复行提供一个行号,DELETE 语句仅删除重复行(行号 > 1)

© www.soinside.com 2019 - 2024. All rights reserved.