删除重复的行和更新引用

Tho*_*mas 9 sql t-sql sql-server-2005

如何删除一个表中的重复行并将另一个表中的引用更新为剩余行?复制仅发生在名称中.Id列是标识列.

例:

假设我们有两个表DoublesData.

Doubles table (
   Id int,
   Name varchar(50)
)

Data Table (
    Id int,
    DoublesId int
)
Run Code Online (Sandbox Code Playgroud)

现在我在Doubls表中有两个条目:

Id Name
1  Foo
2  Foo
Run Code Online (Sandbox Code Playgroud)

数据表中有两个条目:

ID DoublesId
1  1
2  2
Run Code Online (Sandbox Code Playgroud)

最后,双打表中应该只有一个条目:

Id Name
1  Foo
Run Code Online (Sandbox Code Playgroud)

数据表中有两个条目:

Id DoublesId
1  1
2  1 
Run Code Online (Sandbox Code Playgroud)

在双精度表中,每个名称(最多30个)和常规"单个"行可以有任意数量的重复行.

Rob*_*bin 8

我没有运行这个,但希望它应该是正确的,并且足够接近最终的解决方案才能到达那里.如果你愿意,请告诉我任何错误,我会更新答案.

--updates the data table to the min ids for each name
update Data
set id = final_id
from
  Data
join
  Doubles 
on Doubles.id = Data.id
join
(
  select 
    name
    min(id) as final_id
  from Doubles
  group by name
) min_ids
on min_ids.name = Doubles.name

--deletes redundant ids from the Doubles table
delete 
from Doubles
where id not in
(
  select 
    min(id) as final_id
  from Doubles
  group by name
)
Run Code Online (Sandbox Code Playgroud)