识别重复记录并使用第一次出现的ID更新它们

时间:2011-10-28 14:30:54

标签: sql oracle duplicate-data

我有一张这样的桌子。

ID  Name      Source ID
1   Orange       0
2   Pear         0
3   Apple        0
4   Orange       0
5   Apple        0
6   Banana       0
7   Orange       0

我想做的是:

  • 对于第一次出现“名称”的记录,我想用“Id”值更新“来源ID”
  • 对于SECOND和CONSECUTIVE出现“名称”的记录,我想用第一次出现的“Id”值更新“Source Id”

因此,该表应更新如下:

ID  Name      Source ID
1   Orange       1
2   Pear         2
3   Apple        3
4   Orange       1
5   Apple        3
6   Banana       6
7   Orange       1

我怎样才能在SQL中做到这一点(特别是Oracle,但我对General SQL也很好)...

谢谢!

3 个答案:

答案 0 :(得分:1)

UPDATE MyTable
SET SourceID = Sub.ID
FROM MyTable 
INNER JOIN (SELECT MIN(ID) as ID, Name FROM MyTable GROUP BY Name) Sub
    ON Sub.Name = MyTable.Name

只需使用一个子查询,列出每个名称的最小ID。

答案 1 :(得分:1)

由于ID正在增加自动增量值(对吗?),FirstID可以计算为MIN(ID)

UPDATE fruits
  SET SourceID = ag.ID
FROM fruits f 
INNER JOIN
(
  SELECT MIN(ID) as ID, Name FROM @fruits
  GROUP BY Name
) ag 
ON ag.Name = f.Name

答案 2 :(得分:1)

这样的事情可以让你得到你想要的东西:

update table a
set source_id = (
    select min(id)
    from table b
    where b.name = a.name
);