0

我有一张如下所示的表格

ID   NAME   EMAIL
1    John   asd@asd.com
2    Sam    asd@asd.com
3    Tom    bcd@asd.com
4    Bob    bob@asd.com
5    Tom    bcd@asd.com
6    Tom    bcd@asd.com
7    ash    ash@asd.com
8    Bob    bob@asd.com

现在我想编写一个查询,它应该检测重复的键值对。即如下所示,它应该从 SQL 表中删除它们。

5    Tom    bcd@asd.com
6    Tom    bcd@asd.com
8    Bob    bob@asd.com

最后,如果我查询我的表,它应该看起来像这样

ID   NAME   EMAIL
1    John   asd@asd.com
2    Sam    asd@asd.com
3    Tom    bcd@asd.com
4    Bob    bob@asd.com
5    ash    ash@asd.com
4

2 回答 2

2

使用ROW_NUMBER

WITH CTE AS(
    SELECT [ID], [NAME], [EMAIL],
       RN = ROW_NUMBER() OVER (PARTITION BY [NAME], [EMAIL] ORDER BY ID ASC)
    FROM dbo.TableName
)
DELETE FROM CTE WHERE RN > 1;

DEMO

但是你想要的结果是不正确的。我假设您想删除 5 并保留 7 (5 是汤姆不是灰烬)。

于 2013-09-11T12:31:26.400 回答
0

这应该适用于 MySQL 和 SQL Server:

delete  YourTable
where   id not in
        (
        select  min(id)
        from    YourTable
        group by
                name
        ,       email
        )

DEMO

于 2013-09-11T12:29:42.350 回答