我有两张桌子:
Table1:
[id], [ColA]
Table2:
[id], [Table1Id]
先前的更新导致Table1中的重复项,并且这些重复项与Table2中的行相关联。它在db中看起来像这样:
Table1
1, 89
2, 89
Table2
6, 1
7, 2
我想删除重复项,并将Table2.Table1Id
的值重新分配给应该留下的Table1.id
行。这可能在一个声明中吗?我见过this post关于如何删除除一个以外的所有内容,但我对如何重新分配Table2.Table1Id
值感到迷茫。
编辑: 最终结果应如下所示:
Table1
2, 89
Table2
6, 2
7, 2
答案 0 :(得分:0)
drop table if exists dbo.Table2;
drop table if exists dbo.Table1;
create table dbo.Table1 (
ID int primary key
, ColA int
);
create table dbo.Table2 (
ID int
, Table1ID int
);
alter table dbo.Table2
add constraint FK_Table2_Table1
foreign key (Table1ID)
references dbo.Table1 (ID);
insert into dbo.Table1 (ID, ColA)
values (1, 89), (2, 89);
insert into dbo.Table2 (ID, Table1ID)
values (6, 1), (7, 2);
drop table if exists #temp;
select
ttt.ID
into #temp
from (
select
t.ID
, t.ColA
, ROW_NUMBER() over (order by t.ID) as Rbr
from dbo.Table1 t
inner join (
select
t.ColA
from dbo.Table1 t
group by t.ColA
having COUNT (t.ID) > 1
) tt on t.ColA = tt.ColA
) ttt
where ttt.Rbr > 1
update t2
set
Table1ID = t1i.ID
from #temp t
inner join dbo.Table2 t2 on t.ID = t2.Table1ID
inner join dbo.Table1 t1 on t.ID = t1.ID
inner join dbo.Table1 t1i on t1.ColA = t1i.ColA
and t1i.ID not in (select t.ID from #temp t)
delete t1
from #temp t
inner join dbo.Table1 t1 on t.ID = t1.ID
select
*
from dbo.Table1 t
select
*
from dbo.Table2 t