【发布时间】:2016-06-16 16:46:25
【问题描述】:
我是使用 T-SQL 查询的新手,我正在尝试不同的解决方案,以便从一个超大的表(超过 270,000 行)中删除重复的行。 该表看起来像:
TableA
-----------
RowID int not null identity(1,1) primary key,
Col1 varchar(50) not null,
Col2 int not null,
Col3 varchar(50) not null
由于存在 RowID 标识字段,此表的行不是完全重复的。 我需要加入的第二个表:
TableB
-----------
RowID int not null identity(1,1) primary key,
Col1 int not null,
Col2 varchar(50) not null
在 TableA 我有类似的东西:
1 | gray | 4 | Angela
2 | red | 6 | Diana
3 | black| 6 | Alina
4 | black| 11 | Dana
5 | gray | 4 | Angela
6 | red | 12 | Dana
7 | red | 6 | Diana
8 | black| 11 | Dana
在表 B 中:
1 | 6 | klm
2 | 11 | lmi
TableB (Col1) 中的第二列是 TableA (Col2) 中的外键。 我只需要从 TableA 中删除 Col2 = 6 的重复项,而忽略其他重复项。
1 | gray | 4 | Angela
2 | red | 6 | Diana
4 | black| 6 | Alina
5 | black| 11 | Dana
6 | gray | 4 | Angela
7 | red | 12 | Dana
8 | black| 11 | Dana
我尝试过使用
DELETE FROM TableA a inner join TableB b on a.Col2=b.Col1
WHERE a.RowId NOT IN (SELECT MIN(RowId) FROM TableA GROUP BY RowId, Col1, Col2, Col3) and b.Col2="klm"
但我仍然需要删除一些重复项。
使用连接删除不完美的重复行的最佳方法是什么?
【问题讨论】:
标签: tsql join sql-delete