Maison >base de données >Oracle >Comment supprimer les enregistrements en double dans Oracle

Comment supprimer les enregistrements en double dans Oracle

PHPz
PHPzoriginal
2023-04-04 09:12:257923parcourir

Dans la base de données Oracle, en raison de la complexité et des changements constants des données, des enregistrements en double se produisent souvent, ce qui provoque des erreurs système et affecte l'intégrité et l'exactitude des données. Par conséquent, il est crucial de supprimer les enregistrements en double dans la base de données Oracle.

Voici quelques méthodes efficaces qui peuvent vous aider à supprimer rapidement les enregistrements en double.

1. Utilisez le mot-clé DISTINCT

Méthode 1 : Utilisez le mot-clé "DISTINCT" pour supprimer rapidement les enregistrements en double d'une table. Vous pouvez utiliser l'instruction SQL suivante :

DELETE FROM table_name
WHERE rowid NOT IN (SELECT MIN(rowid) FROM table_name GROUP BY column1, column2, ..., column_n);

Dans cette instruction SQL, le mot-clé "DISTINCT". Les colonnes sont combinées dans un ensemble simple pour rechercher les enregistrements en double. Les instructions SELECT et GROUP BY sont utilisées pour rechercher les enregistrements en double et les supprimer afin de garantir l'exactitude des données.

Remarque : Pour une seule colonne, vous pouvez utiliser le code SQL suivant :

DELETE FROM table_name
WHERE rowid NOT IN (SELECT MIN(rowid) FROM table_name GROUP BY column_name);

Deuxièmement, utilisez la fonction ROW_NUMBER()

Méthode 2 : La fonction ROW_NUMBER() peut utiliser la technologie de partitionnement pour identifier les enregistrements en double et les supprimer :

DELETE FROM table_name
WHERE rowid IN (
  SELECT row_id FROM (
    SELECT rowid row_id,
    ROW_NUMBER() OVER (PARTITION BY column2, column3 ORDER BY column1) duplicate_records_count
    FROM table_name
  ) WHERE duplicate_records_count > 1
);

Dans ce SQL Dans l'instruction, la fonction "ROW_NUMBER()" est utilisée pour identifier les enregistrements en double et marquer le premier enregistrement en double comme "1" pour aider à supprimer les autres enregistrements marqués en double. La technologie de partitionnement regroupe les enregistrements identiques et les trie en fonction des groupes pour garantir l'exactitude des données.

3. Utilisez la sous-requête EXISTS

Méthode 3 : La sous-requête EXISTS peut utiliser la clause WHERE pour supprimer les enregistrements en double :

DELETE table_name a
WHERE EXISTS (
  SELECT 1 FROM table_name b
  WHERE b.column1 = a.column1 AND b.column2 = a.column2 AND b.column3 = a.column3 AND b.rowid > a.rowid
);

Dans cette instruction SQL, la sous-requête "EXISTS" se trouve dans la ligne actuelle (c'est-à-dire "a"). enregistrements avec la même valeur. Puisqu’il s’agit d’enregistrements en double, leurs ROWID sont différents. Par conséquent, tant que ROWID a est supérieur à ROWID b, les enregistrements en double peuvent être supprimés.

4. Utiliser les opérateurs d'ensemble

Méthode 4 : Les opérateurs d'ensemble peuvent être combinés avec les opérateurs "SELECT" et "UNION ALL" pour rechercher et supprimer les enregistrements en double.

DELETE FROM table_name
WHERE ROWID IN (
  SELECT ROWID FROM (
    SELECT column1, column2, column3, COUNT(*) duplicates
    FROM table_name
    GROUP BY column1, column2, column3
    HAVING COUNT(*) > 1
    UNION ALL
    SELECT column1, column2, column3, COUNT(*) duplicates
    FROM table_name
    GROUP BY column1, column2, column3
    HAVING COUNT(*) = 1
  ) a
  WHERE a.duplicates > 1
)

Dans cette instruction SQL, l'opérateur "UNION ALL" combine deux instructions SELECT pour rechercher les enregistrements en double et les enregistrements non en double. La clause HAVING est utilisée pour filtrer les enregistrements comportant des décomptes en double et les supprimer.

En conclusion, différentes méthodes et techniques peuvent être utilisées pour supprimer les enregistrements en double dans la base de données Oracle. Choisissez simplement la méthode appropriée en fonction de vos besoins. Lors de la suppression des enregistrements en double, veillez à protéger l'intégrité et l'exactitude des données du système.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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