ホームページ > データベース > mysql チュートリアル > SQL で他の列の重複を保持したまま、重複するメールを削除するにはどうすればよいですか?

SQL で他の列の重複を保持したまま、重複するメールを削除するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-02 16:32:39
オリジナル
561 人が閲覧しました

How to Remove Duplicate Emails While Keeping Other Column Duplicates in SQL?

DISTINCT を使用した SQL クエリでの電子メールの重複の排除

提供された SQL クエリで、許可しながら一意の電子メール エントリを返すように変更することを目的としています。他の列に重複があります。 DISTINCT と GROUP BY は行全体を操作するため、この目標を達成するには別のアプローチが必要です。

解決策は、SQL Server の ROW_NUMBER() 関数を利用するサブクエリを組み込むことです。電子メールに基づいてデータセットを分割し、ROW_NUMBER() 関数を使用して ID の降順で並べ替えることにより、各電子メール グループ内の各行に一意のランクを割り当てることができます。

その後、メイン クエリは、ランク値 (rn) は 1 に等しく、結果には個別の電子メールごとに 1 行のみが含まれることが保証されます。

これは変更されたものです。 query:

SELECT *
FROM (
    SELECT ID, Email, ProductName, ProductModel,
        ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn
    FROM Products
) a
WHERE rn = 1
ログイン後にコピー

このクエリは、他の列の重複を保持しながら、重複した電子メールを効果的に削除します。次の例に示すように、サブクエリに条件フィルターを追加することでクエリをさらに絞り込むことができます。

SELECT *
FROM (
    SELECT ID, Email, ProductName, ProductModel,
        ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn
    FROM Products
    WHERE ProductModel = 2 AND ProductName LIKE 'CYBER%'
) a
WHERE rn = 1
ログイン後にコピー

この変更されたクエリは、ProductModel が 2 で名前が 'CYBER% で始まる製品に結果を制限します。 '、これらの条件内で重複しない電子メール エントリを保持します。

以上がSQL で他の列の重複を保持したまま、重複するメールを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート