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 は Tom ではなく Ash でした)。

于 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 に答える