【问题标题】:Identify duplicate records and update them with the ID of first occurrence识别重复记录并使用第一次出现的 ID 更新它们
【发布时间】:2011-10-28 14:30:53
【问题描述】:

我有一张这样的桌子。

ID 名称 来源 ID 1 橙色 0 2 梨 0 3 苹果 0 4 橙色 0 5 苹果 0 6 香蕉 0 7 橙色 0

我想做的是:

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

所以,表格应该更新如下:

ID 名称 来源 ID 1 橙色 1 2 梨 2 3 苹果 3 4 橙色 1 5 苹果 3 6 香蕉 6 7 橙色 1

我如何在 SQL 中做到这一点(尤其是 Oracle,但我也可以使用通用 SQL)...

谢谢!

【问题讨论】:

  • 很好。到目前为止,您尝试过什么?
  • 什么版本的Oracle?分析支持从 9i 开始。你试过用什么?

标签: sql oracle duplicate-data


【解决方案1】:

这样的东西应该可以得到你想要的:

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

【讨论】:

  • Oracle 是否支持 UPDATE 上的别名 别名?
【解决方案2】:
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 的子查询。

【讨论】:

    【解决方案3】:

    由于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
    

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 1970-01-01
      • 2013-04-22
      • 2019-12-18
      • 2018-10-04
      • 2018-11-20
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      相关资源
      最近更新 更多