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

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

Barbara Streisand
リリース: 2025-01-03 03:13:40
オリジナル
141 人が閲覧しました

How to Delete Duplicate Records from an 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');
ログイン後にコピー

このテーブルの場合、目標は、重複レコードを保持しながら削除することです。ユニークなもの。これを実現するには、「ROW_NUMBER()」関数と「DELETE」ステートメントを組み合わせて使用​​します。

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

コードの詳細:

  • 内部クエリROW_NUMBER() 関数を使用して、重複レコードの各グループの各行に連続番号を割り当てます。 PARTITION BY 句は、EmpId、EmpName、および EmpSSN 列によってデータをパーティション分割し、ORDER BY EmpId により、行に EmpId の昇順で番号が付けられるようにします。
  • 外部クエリは、内部クエリの cnt 列を次のように使用します。重複する行のみを選択するフィルター (cnt > 1)。
  • DELETE ステートメントは、サブクエリを使用して元のテーブルから重複行を削除します。

このクエリを実行すると、「employee」テーブル内の重複レコードが削除され、一意のレコードのみが残ります:

select * from employee;

EmpId EmpName EmpSSN
1      Jack   555-55-5555
2      Joe    555-56-5555
3      Fred   555-57-5555
4      Mike   555-58-5555
5      Cathy  555-59-5555
6      Lisa   555-70-5555
ログイン後にコピー

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

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