gpt4 book ai didi

oracle - 从复合主键表中删除重复项

转载 作者:行者123 更新时间:2023-12-01 15:05:52 24 4
gpt4 key购买 nike

我有一个包含复合主键 (a,b) 的表。我在临时表中进行了备份,但有些重复记录是如何出现的。现在无法将备份记录移动到主表。

请建议一些方法来删除基于 2 列的临时表中的重复项。表是 oracle 表,有 7000 万条记录,大约有 400 万条重复记录

最佳答案

你有两个选择:

  1. 在复制之前删除源表中的重复项
  2. 首先不要复制重复项。

第二个更有效,可以使用以下语句完成:

INSERT INTO target_table (a,b,c,d,e,f)
SELECT a,b,max(c),max(d),max(e),max(f)
FROM source_table
GROUP BY a,b;

作为替代方案(例如,当某些列定义为 CLOBLONG 并且您不能对它们应用 max() 时):

INSERT INTO target_table (a,b,c,d,e,f)
SELECT a,b,c,d,e,f
FROM (
SELECT a,b,c,d,e,f,
row_number() over (partition by a,b) as rn
FROM source_table
)
WHERE rn = 1;

如果你真的想先删除行,你可以用下面的语句来完成:

DELETE FROM source_table
WHERE rowid NOT IN (SELECT min(rowid)
FROM source_table
GROUP BY a,b
HAVING count(*) > 1)

关于oracle - 从复合主键表中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10517737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com