从表中删除a = b和b = a的记录

Tre*_*mor 2 sql sql-server sql-delete

我有一个有两个字段的表,a和b.在a = b和b = a的意义上,一些记录是重复的.我想删除这些记录.

考虑一下:

declare @temp table (a int, b int)

insert into @temp values (1, 2)
insert into @temp values (3, 4)
insert into @temp values (4, 3)
insert into @temp values (5, 6)

--delete 3, 4 or 4, 3

select * from @temp

/*
a | b
--|--
1 | 2
3 | 4
5 | 6

or (I don't care which one)

a | b
--|--
1 | 2
4 | 3
5 | 6
*/
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?它需要支持Microsoft SQL Server 2000及更高版本.

Joh*_*Woo 5

DELETE  x
FROM    TableName x
        INNER JOIN
        (
          SELECT  a.A, a.B
          FROM    tableName a
                  INNER JOIN tableName b
                      ON ((a.A = b.A AND a.b = b.b) OR
                          (a.A = b.B AND a.b = b.A)) AND 
                         a.a > b.a
        ) y ON x.A = y.A AND x.B = y.B
Run Code Online (Sandbox Code Playgroud)