ホームページ > データベース > mysql チュートリアル > 主キーのない SQL テーブルから重複行を削除するにはどうすればよいですか?

主キーのない SQL テーブルから重複行を削除するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-05 16:53:40
オリジナル
553 人が閲覧しました

How to Delete Duplicate Rows from a SQL Table Without a Primary Key?

主キーのない SQL テーブルからの重複レコードの削除

主キーのない SQL テーブルでは、重複レコードを特定して削除できます。複雑なタスクになる。この問題は、複数の行が特定の列で同じ値を共有し、データに冗長性が生じた場合に発生します。これを解決するために、列の組み合わせに基づいて重複行を効果的に削除するクエリを検討します。

指定されたデータを持つ「employee」という名前の次のテーブルについて考えます。

create table employee
(
 EmpId number,
 EmpName varchar2(10),
 EmpSSN varchar2(11)
);

insert into employee values(1, 'Jack', '555-55-5555');
insert into employee values (2, 'Joe', '555-56-5555');
insert into employee values (3, 'Fred', '555-57-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
insert into employee values (1, 'Jack', '555-55-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6 ,'Lisa', '555-70-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
ログイン後にコピー

To 「EmpId」と「EmpSSN」に基づいて重複する行を削除するには、以下を活用できます。クエリ:

DELETE SUB FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY EmpId, EmpName, EmpSSN ORDER BY EmpId) cnt
 FROM Employee) SUB
WHERE SUB.cnt > 1
ログイン後にコピー

説明:

  1. 内部クエリは、パーティション化列「EmpId」、「EmpName」、および「EmpSSN」に基づいて各行の行番号を計算します。このステップでは、これらのフィールドの一意の組み合わせごとに行の順序を特定します。
  2. 次に、外側のクエリは、行番号「cnt」が 1 より大きい行を削除します。これは、その特定の組み合わせに重複する行があることを示します。

このクエリを実行すると、データの元の順序を維持しながら、重複レコードが「employee」テーブルから効果的に削除されます。実行後、テーブルには「EmpId」フィールドと「EmpSSN」フィールドに基づく一意の行のみが含まれます。

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

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