如何从表中删除重复项,其中除PK之外的所有列都很重要。
declare @dummy table
(
pk int,
a char(1),
b char(1),
c char(1)
)
insert into @dummy
select 1, 'A', 'B', 'B' union all
select 2, 'A', 'B', 'B' union all
select 3, 'P', 'Q', 'R' union all
select 4, 'P', 'Q', 'R' union all
select 5, 'X', 'Y', 'Z' union all
select 6, 'X', 'Y', 'Z' union all
select 7, 'A', 'B', 'Z'
我得到的区别是:
select * from @dummy
pk a b c
----------- ---- ---- ----
1 A B B
2 A B B
3 P Q R
4 P Q R
5 X Y Z
6 X Y Z
7 A B Z
我想要的是:
select ... do magic ....
pk a b c
----------- ---- ---- ----
1 A B B
3 P Q R
5 X Y Z
7 A B Z
答案 0 :(得分:3)
找到它:
select min(pk), a, b, c
from @dummy
group by a, b, c
答案 1 :(得分:0)
你想要这样的东西,我想:
DELETE FROM f
FROM @dummy AS f INNER JOIN @dummy AS g
ON g.data = f.data
AND f.id < g.id
查看此文章:http://www.simple-talk.com/sql/t-sql-programming/removing-duplicates-from-a-table-in-sql-server/
答案 2 :(得分:0)
起初,我认为不同会做,但我很确定你想要的是分组:
select * from @dummy group by a,b,c
由于存在唯一的主键,因此所有行都是不同的。