我想从表 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 按属性分组))
此代码有效,但我不确定这是否是识别重复行并删除它们的正确方法。 请帮忙。
您可以像这样使用 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)