ホームページ データベース mysql チュートリアル Oracle删除重复记录的几种方式

Oracle删除重复记录的几种方式

Jun 07, 2016 pm 05:29 PM
oracle

如果把一个文件多次导入数据库,可能会引入重复记录,那么有哪些方法可以删除重复记录呢?

Oracle删除重复记录的几种方式

如果把一个文件多次导入数据库,可能会引入重复记录,那么有哪些方法可以删除重复记录呢?

 REATE TABLE tbl_test(
  SER_NO NUMBER,
  FST_NM VARCHAR2(30),
  DEPTID NUMBER,
  CMNT  VARCHAR2(30));
 
 INSERT INTO tbl_test VALUES(1, 'aaaaa', 2004, 'xxx');
 INSERT INTO tbl_test VALUES(2, 'bbbbb', 2005, 'yyy');
 INSERT INTO tbl_test VALUES(1, 'aaaaa', 2004, 'xxx');
 INSERT INTO tbl_test VALUES(1, 'aaaaa', 2004, 'xxx');
 INSERT INTO tbl_test VALUES(3, 'ccccc', 2005, 'zzz');
 INSERT INTO tbl_test VALUES(2, 'bbbbb', 2005, 'yyy');
 
1.Using MIN(rowid) 最常用的方法,但是数据量大的话执行会很长时间
 
 DELETE FROM tbl_test
    WHERE ROWID NOT IN (SELECT  MIN (ROWID)
          FROM tbl_test
        GROUP BY ser_no, fst_nm, deptid, cmnt);
       
2.Using MIN(rowid) & Join 跟第一条差不多

 DELETE FROM tbl_test t
    WHERE t.ROWID NOT IN (SELECT MIN (b.ROWID)
          FROM tbl_test b
        WHERE b.ser_no = t.ser_no
          AND b.fst_nm = t.fst_nm
          AND b.deptid = t.deptid
          AND b.cmnt  = t.cmnt);
         
3.Using Subquery

 DELETE FROM tbl_test
 WHERE ser_no IN (SELECT ser_no FROM tbl_test GROUP BY ser_no, fst_nm, deptid, cmnt HAVING COUNT (*) > 1)
 AND fst_nm IN (SELECT fst_nm FROM tbl_test GROUP BY ser_no, fst_nm, deptid, cmnt HAVING COUNT (*) > 1)
 AND deptid IN (SELECT deptid FROM tbl_test GROUP BY ser_no, fst_nm, deptid, cmnt HAVING COUNT (*) > 1)
 AND cmnt  IN (SELECT cmnt  FROM tbl_test GROUP BY ser_no, fst_nm, deptid, cmnt HAVING COUNT (*) > 1)
 AND ROWID NOT IN (SELECT  MIN (ROWID)
 FROM tbl_test
    GROUP BY ser_no, fst_nm, deptid, cmnt
 HAVING COUNT (*) > 1)         
       
4. Using Nested Subqueries     

 DELETE FROM tbl_test a WHERE (a.ser_no, a.fst_nm, a.deptid, a.cmnt) IN (SELECT b.ser_no, b.fst_nm, b.deptid, b.cmnt
 FROM tbl_test b WHERE a.ser_no = b.ser_no AND a.fst_nm = b.fst_nm AND a.deptid = b.deptid AND a.cmnt  = b.cmnt AND
 a.ROWID  > b.ROWID);
               
5. Using Analytic Fucntions: 对于大表这是最有效的方法

 DELETE FROM tbl_test WHERE ROWID IN (SELECT rid FROM (SELECT ROWID rid,
 ROW_NUMBER () OVER (PARTITION BY ser_no, fst_nm, deptid, cmnt ORDER BY ROWID) rn FROM tbl_test)WHERE rn 1);             
     
6. CREATE-DROP-RENAME 对资源使用比较合理,,特别对于大表。但是如果需要回滚则会产生大量undo日志信息。
 
 CREATE  TABLE tbl_test1 NOLOGGING AS SELECT tbl_test .*
 FROM tbl_test tbl_test WHERE ROWID IN (SELECT rid
 FROM (SELECT ROWID rid, ROW_NUMBER() OVER (PARTITION BY ser_no, fst_nm, deptid, cmnt ORDER BY ROWID) rn
 FROM tbl_test) WHERE rn=1);
     
 DROP TABLE tbl_test; --drop the original table with lots of duplicate 
 
 RENAME tbl_test1 TO tbl_test; -- your original table without duplicates.

linux

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle RACでハードディスクを追加および交換する方法 Oracle RACでハードディスクを追加および交換する方法 Apr 11, 2025 pm 05:39 PM

Oracle RACハードディスク新規および交換操作:ハードディスクの追加:新しいディスクの追加、ASMディスクグループの作成、クラスターへの追加、データファイルの移動。ハードディスクの交換:失敗したハードディスクを識別し、ディスクグループを閉じ、ハードディスクを交換し、ディスクグループを再開し、故障したディスクを修復し、データファイルを移動します。

Oracleのデータベースで構成されているファイルの種類は何ですか? Oracleのデータベースで構成されているファイルの種類は何ですか? Apr 11, 2025 pm 04:18 PM

Oracleデータベースファイルシステムは、複数のファイルで構成されています。データファイル:実際のデータの保存。制御ファイル:データベース構造情報を記録します。ログファイルをやり直し:データベースの変更操作を録画します。パラメーターファイル:データベースパラメーター設定が含まれます。一時的なファイル:中間の結果を保存します。これらのファイルタイプとそれらの関係を理解することは、データベース管理とパフォーマンスの調整にとって重要です。ファイルのカウント、サイズ、およびストレージメディアの計画は、パフォーマンスを最適化し、データの可用性を保証します。

CディスクにインストールされているOracleデータベースは何ですか? CディスクにインストールされているOracleデータベースは何ですか? Apr 11, 2025 pm 04:21 PM

Cドライブ上のOracleデータベースの隠れ場所:レジストリ:レジストリエディターを使用して「Oracle」を検索してインストールパス、サービス名などを含む情報を見つけます。ファイルシステム:Oracleファイルは、ホームディレクトリ、システムファイル、一時ファイルなどを含むCドライブの複数の場所に散らばっています。慎重なアクション:Oracleをアンインストールするときは、ファイルを削除するだけでなく、レジストリとサービスをクリーンする必要があります。公式のアンインストールツールを使用するか、専門的なヘルプを求めることをお勧めします。スペース管理:ディスクスペースを最適化して、CドライブにOracleの設置を避けます。定期的に一時的なファイルを清掃します

Oracle Garled Codeを処理する方法 Oracle Garled Codeを処理する方法 Apr 11, 2025 pm 07:00 PM

Oracle Garledの問題は、通常、不適切な文字セット設定によって引き起こされます。ソリューションには、サーバー、データベース、クライアントの文字セットのチェックが含まれます。必要に応じて、サーバー、データベース、およびクライアント文字セットを設定します。 Convert関数またはdbms_lob.convert_lob関数を使用して、文字化けデータを修正します。常に文字セットを指定し、NLSパラメーターを正しく設定します。

Oracleを再び追求する方法 Oracleを再び追求する方法 Apr 11, 2025 pm 07:33 PM

Oracleは複数の重複排除クエリメソッドを提供します。個別のキーワードは、各列の一意の値を返します。 Group by Clauseは、結果をグループ化し、各グループの非繰り返し値を返します。一意のキーワードは、一意の行のみを含むインデックスを作成するために使用され、インデックスをクエリすると自動的に重複排除が行われます。 row_number()関数は、一意の数値を割り当て、行1のみを含む結果をフィルタリングします。min()またはmax()関数は、数値列の非繰り返し値を返します。交差する演算子は、2つの結果セットの共通値を返します(複製なし)。

Oracleデータベースの基本知識の概要 Oracleデータベースの基本知識の概要 Apr 11, 2025 pm 06:33 PM

Oracleデータベースは、信頼性が高く、スケーラブルで機能が豊富なリレーショナルデータベース管理システム(RDBMS)です。そのアーキテクチャは、サーバー側コンポーネント(Oracle Net)、インスタンス、共有メモリ領域(SGA)、バックグラウンドプロセス、データを保存するデータベースファイルなど、クライアントサーバーモデルに従います。基本的な概念には、表、行、列、一次キー、外部キー、インデックス、カーソルが含まれます。このデータベースは、高可用性、ビッグデータサポート、豊富な機能、強力なセキュリティ、使いやすさなどの利点で知られています。

Oracle文字セットを変更する方法 Oracle文字セットを変更する方法 Apr 11, 2025 pm 06:57 PM

Oracle文字セットを変更するには、以下が必要です。データベースをバックアップします。 init.oraファイルの文字設定設定を変更します。データベースを再起動します。既存のテーブルと列を変更して、新しい文字セットを使用します。データをリロードします。データベースリンク(オプション)を変更します。

Oracleで主要なキー制約を作成する方法 Oracleで主要なキー制約を作成する方法 Apr 11, 2025 pm 07:15 PM

主キーは、テーブル内の各行を一意に識別する特別な列または列の組み合わせです。テーブル内のレコードが一意であり、次のように作成できることが保証されます。AlterTableステートメントを使用してテーブル名を指定します。プライマリキーキーワードを追加して、列名を追加して、プライマリキーとして指定します。主なキーの制約は、データの一意性を確保し、クエリ速度を改善し、レコードの重複を防ぎ、テーブル結合を簡素化するのに役立ちます。

See all articles