Tho*_*mas 9 sql t-sql sql-server-2005
如何删除一个表中的重复行并将另一个表中的引用更新为剩余行?复制仅发生在名称中.Id列是标识列.
假设我们有两个表Doubles和Data.
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个)和常规"单个"行可以有任意数量的重复行.
我没有运行这个,但希望它应该是正确的,并且足够接近最终的解决方案才能到达那里.如果你愿意,请告诉我任何错误,我会更新答案.
--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)
| 归档时间: |
|
| 查看次数: |
1539 次 |
| 最近记录: |