我在 PostgreSQL 8.3.8 数据库中有一个表,它上面没有键/约束,并且有多行具有完全相同的值。
我想删除所有重复项并只保留每行的 1 个副本。
特别是有一列(名为“key”)可用于识别重复项,即每个不同的“key”应该只存在一个条目。
我怎样才能做到这一点? (理想情况下,使用单个 SQL 命令。)
在这种情况下,速度不是问题(只有几行)。
原文由 André Morujão 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在 PostgreSQL 8.3.8 数据库中有一个表,它上面没有键/约束,并且有多行具有完全相同的值。
我想删除所有重复项并只保留每行的 1 个副本。
特别是有一列(名为“key”)可用于识别重复项,即每个不同的“key”应该只存在一个条目。
我怎样才能做到这一点? (理想情况下,使用单个 SQL 命令。)
在这种情况下,速度不是问题(只有几行)。
原文由 André Morujão 发布,翻译遵循 CC BY-SA 4.0 许可协议
DELETE FROM tracking_order
WHERE
mvd_id IN (---column you need to remove duplicate
SELECT
mvd_id
FROM (
SELECT
mvd_id,thoi_gian_gui,
ROW_NUMBER() OVER (
PARTITION BY mvd_id
ORDER BY thoi_gian_gui desc) AS row_num
FROM
tracking_order
) s_alias
WHERE row_num > 1)
AND thoi_gian_gui in ( --column you used to compare to delete duplicates, eg last update time
SELECT
thoi_gian_gui
FROM (
SELECT
thoi_gian_gui,
ROW_NUMBER() OVER (
PARTITION BY mvd_id
ORDER BY thoi_gian_gui desc) AS row_num
FROM
tracking_order
) s_alias
WHERE row_num > 1)
我的代码,我删除了所有重复的 7800445 行,并在 7 分 28 秒内仅保留每行的 1 个副本。 在此处输入图像描述
原文由 Trung Truong 发布,翻译遵循 CC BY-SA 4.0 许可协议
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
3 回答2.3k 阅读
2 回答946 阅读