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.

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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