如何删除一个表中的重复行,并将另一表中的引用更新为其余行?复制仅发生在名称中。 Id列是Identity列。
例子:
假设我们有两个表Doubles
和Data
。
Doubles table (
Id int,
Name varchar(50)
)
Data Table (
Id int,
DoublesId int
)
现在,我在Doubls表中有两个条目:Id Name
1 Foo
2 Foo
以及数据表中的两个条目:ID DoublesId
1 1
2 2
最后, double 表中应该只有一个条目:Id Name
1 Foo
以及数据表中的两个条目:Id DoublesId
1 1
2 1
在doubles表中,每个名称可以有任意数量的重复行(最多30个),也可以包含常规的“单”行。
最佳答案
我没有执行此操作,但希望它应该是正确的,并且距离最终解决方案足够近以使您到达那里。如果您愿意,请让我知道任何错误,我将更新答案。
--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
)
关于sql - 删除重复的行并更新引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1497183/