我的表中有重复的行,我想以最有效的方式删除重复行,因为表很大。经过一番研究,我想出了这个查询:
WITH TempEmp AS
(
SELECT name, ROW_NUMBER() OVER(PARTITION by name, address, zipcode ORDER BY name) AS duplicateRecCount
FROM mytable
)
-- Now Delete Duplicate Records
DELETE FROM TempEmp
WHERE duplicateRecCount > 1;
但它只适用于 SQL,而不适用于 Netezza。它似乎不喜欢 DELETE
WITH
?
原文由 moe 发布,翻译遵循 CC BY-SA 4.0 许可协议
我喜欢 @erwin-brandstetter 的解决方案,但想展示一个带有
USING
关键字的解决方案:If you want to review the records before deleting them, then simply replace
DELETE
withSELECT *
andUSING
with a comma,
, ie更新:我在这里测试了一些不同的解决方案以提高速度。如果您不希望有很多重复项,那么此解决方案的性能比具有
NOT IN (...)
子句的解决方案要好得多,因为它们会在子查询中生成大量行。如果您重写查询以使用
IN (...)
那么它的执行与此处提供的解决方案类似,但 SQL 代码变得不那么简洁。更新 2:如果您在关键列之一中有
NULL
值(您真的不应该在 IMO),那么您可以在该列的条件下使用COALESCE()
,例如