Maison base de données tutoriel mysql Oracle 查询与删除表中的重复记录sql语句

Oracle 查询与删除表中的重复记录sql语句

Jun 07, 2016 pm 05:46 PM
oracle

不管我使用什么数据库都碰到有重复数据的存在了,下面我来给大这详细介绍Oracle 删除表中的重复记录的各种方法与性能分析,有需要了解的朋友可参考。

不管我使用什么数据库都碰到有重复数据的存在了,下面我来给大这详细介绍Oracle 删除表中的重复记录的各种方法与性能分析,有需要了解的朋友可参考。

方法:

 代码如下 复制代码
  XX having count(*)>1,rowid,distinct,temporary table,procedure

下面语句可以查询出那些数据是重复的:

 代码如下 复制代码
字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1

将上面的>号改为=号就可以查询出没有重复的数据了。
想要删除这些重复的数据,可以使用下面语句进行删除

 代码如下 复制代码

delete from 表名 a where 字段1,字段2 in
  (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

1、查询表中的重复数据

a.重复一个字段

b.重复多个字段

c.重复一整行

创建测试表:

 代码如下 复制代码

create table cfa (businessid number,customer varchar2(50),branchcode varchar2(10),data_date varchar2(10));
insert into cfa values (1,'Albert','SCB','2011-11-11');
insert into cfa values (2,'Andy','DB','2011-11-12');
insert into cfa values (3,'Allen','HSBC','2011-11-13');

---------------以下为重复数据----------------------------------------------
insert into cfa values (1,'Alex','ICBC','2011-11-14');
insert into cfa values (1,'Albert','CTBK','2011-11-15');
insert into cfa values (1,'Albert','SCB','2011-11-11');

对于a的情况,只有businessid重复

 代码如下 复制代码

select * from cfa where businessid in  (select businessid from cfa group by businessid having count(businessid)>1);

如果是b的情况,businessid 和name同时存在重复

 代码如下 复制代码

select * from cfa where (businessid,customer) in (select businessid,customer from cfa group by businessid,customer having count(*)>1);

对于c的情况,重复一整行

参考b的方法:

 代码如下 复制代码
select * from cfa where (businessid,customer,branchcode,data_date) in (select * from cfa group by businessid,customer,branchcode,data_date having count(*)>1);

2、删除表中的重复数据

a情况,删除表中多余的重复记录,重复记录是根据单个字段(businessid)来判断,只留有rowid最小的记录

也可以只保留rowid不是最小记录,需要把代码中的min改为max这里不再赘述。

 代码如下 复制代码

delete from cfa
where businessid in (select businessid
                        from cfa
                       group by businessid
                      having count(businessid) > 1)
   and rowid not in (select min(rowid)
                       from cfa
                      group by businessid
                     having count(businessid) > 1);

或者,使用下面更简单高效的语句

 代码如下 复制代码

DELETE FROM cfa t
WHERE t.ROWID >
       (SELECT MIN(X.ROWID) FROM cfa X WHERE X.businessid = t.businessid);

b情况,删除表中多余的重复记录(多个字段),只留有rowid最小的记录

 代码如下 复制代码

delete from cfa
where (businessid,customer) in (select businessid,customer
                        from cfa
                       group by businessid,customer
                      having count(*) > 1)
   and rowid not in (select min(rowid)
                       from cfa
                      group by businessid,customer
                     having count(*) > 1);

或者,使用下面更简单高效的语句

 代码如下 复制代码

DELETE FROM cfa t
WHERE t.ROWID > (SELECT MIN(X.ROWID)
                    FROM cfa X
                   WHERE X.businessid = t.businessid
                     and x.customer = t.customer);

上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:

CREATE TABLE 临时表 AS

 代码如下 复制代码
  (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)

  上面这句话就是建立了临时表,并将查询到的数据插入其中。
  下面就可以进行这样的删除操作了:

 代码如下 复制代码
  delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);

  这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。


c情况,这种情况就比较简单,使用临时表方法

 代码如下 复制代码

create table cfabak as select distinct * from cfa;

truncate table cfa;--如果是生产最好对该表backup

Insert into cfa select * from cfabak;

commit;


我们要删除重复数据,只保留最新的一条数据,就可以这样写了:

 代码如下 复制代码

delete from 表名 a
  where a.rowid !=
  (
  select max(b.rowid) from 表名 b
  where a.字段1 = b.字段1 and
  a.字段2 = b.字段2
  )

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajouter et remplacer les disques durs dans Oracle Rac Comment ajouter et remplacer les disques durs dans Oracle Rac Apr 11, 2025 pm 05:39 PM

Oracle RAC Hard Disk New and Remplacement Operations: Ajouter un disque dur: ajouter de nouveaux disques, créer des groupes de disques ASM, ajouter aux clusters, déplacer des fichiers de données. Remplacez le disque dur: identifiez le disque dur échoué, fermez le groupe de disque, remplacez le disque dur, rouvrez le groupe de disque, réparez le disque échoué et déplacez les fichiers de données.

Comment gérer le code brouillé d'Oracle Comment gérer le code brouillé d'Oracle Apr 11, 2025 pm 07:00 PM

Les problèmes brouillés d'Oracle sont généralement causés par des paramètres de caractéristiques incorrects. Les solutions incluent: la vérification du serveur, de la base de données et des jeux de caractères clients. Configurez le serveur, la base de données et les jeux de caractères clients selon les besoins. Utilisez la fonction Converti ou la fonction DBMS_LOB.Convert_lob pour fixer les données brouillées. Spécifiez toujours le jeu de caractères et définissez correctement les paramètres NLS.

Comment remettre à nouveau Oracle Comment remettre à nouveau Oracle Apr 11, 2025 pm 07:33 PM

Oracle fournit plusieurs méthodes de requête de déduplication: le mot-clé distinct renvoie une valeur unique pour chaque colonne. Le groupe par clause regroupe les résultats et renvoie une valeur non réactive pour chaque groupe. Le mot-clé unique est utilisé pour créer un index ne contenant que des lignes uniques, et l'interrogation de l'index sera automatiquement déducteur. La fonction ROW_NUMBER () attribue des nombres uniques et filtre les résultats qui contiennent uniquement la ligne 1. La fonction min () ou max () renvoie les valeurs non réactives d'une colonne numérique. L'opérateur intersecte renvoie les valeurs communes des deux ensembles de résultats (pas de doublons).

Comment vérifier la taille de l'espace de table d'Oracle Comment vérifier la taille de l'espace de table d'Oracle Apr 11, 2025 pm 08:15 PM

Pour interroger la taille de l'espace de table Oracle, suivez les étapes suivantes: Déterminez le nom de l'espace de table en exécutant la requête: sélectionnez Tablespace_name dans dba_tablespaces; Requête la taille de l'espace de table en exécutant la requête: sélectionnez SUM (Bytes) comme total_size, sum (bytes_free) comme disponible_space, sum (bytes) - sum (bytes_free) comme used_space à partir de dba_data_files où tablespace_

Comment se connecter à un serveur cloud Comment se connecter à un serveur cloud Apr 11, 2025 pm 06:51 PM

Les étapes pour se connecter à un serveur Cloud via un client Oracle sont les suivantes: Créez une clé SSH et copiez la clé publique sur le serveur Cloud. Configurez le client Oracle et ajoutez les informations de connexion du serveur Cloud au fichier tnsnames.ora. Créez une nouvelle connexion de base de données dans le client Oracle, entrez le nom d'utilisateur, le mot de passe et DSN. Cliquez sur OK et vérifiez que la connexion est réussie.

Résumé de la connaissance de base de la base de données Oracle Résumé de la connaissance de base de la base de données Oracle Apr 11, 2025 pm 06:33 PM

Oracle Database est un système de gestion de base de données relationnel fiable, évolutif et riche en fonctionnalités (RDBM). Son architecture suit le modèle client-serveur, y compris les composants côté serveur (Oracle Net), les instances, les zones de mémoire partagées (SGAS), les processus d'arrière-plan et les fichiers de base de données qui stockent les données. Les concepts de base incluent des tables, des lignes, des colonnes, des clés primaires, des clés étrangères, des index et des curseurs. La base de données est connue pour ses avantages tels que la haute disponibilité, le support des mégadonnées, les fonctionnalités riches, la forte sécurité et la facilité d'utilisation.

Comment modifier le jeu de caractères Oracle Comment modifier le jeu de caractères Oracle Apr 11, 2025 pm 06:57 PM

Pour modifier le jeu de caractères Oracle, vous devez: sauvegarder la base de données; Modifiez les paramètres du jeu de caractères dans le fichier init.ora; redémarrer la base de données; modifier les tables et colonnes existantes pour utiliser le nouveau jeu de caractères; Recharger les données; Modifiez le lien de la base de données (facultatif).

Comment utiliser les procédures stockées pour Oracle Comment utiliser les procédures stockées pour Oracle Apr 11, 2025 pm 07:03 PM

Une procédure stockée est un ensemble d'instructions SQL qui peuvent être stockées dans une base de données et peuvent être appelées à plusieurs reprises comme une unité distincte. Ils peuvent accepter les paramètres (in, out, inout) et fournir les avantages de la réutilisation du code, de la sécurité, des performances et de la modularité. Exemple: Créez une procédure stockée Calculer_Sum pour calculer la somme de deux nombres et les stocker dans le paramètre OUT.

See all articles