173 votes

Suppression des lignes en double d'une table dans Oracle

Je suis en train de tester quelque chose dans Oracle et j'ai rempli une table avec quelques données échantillons, mais au cours du processus, j'ai accidentellement chargé des enregistrements en double, de sorte que je ne peux pas créer de clé primaire en utilisant certaines des colonnes.

Comment puis-je supprimer toutes les lignes en double et n'en laisser qu'une seule ?

1voto

ala Points 720

Cet article de blog était vraiment utile pour les cas généraux :

Si les lignes sont entièrement dupliquées (toutes les valeurs de toutes les colonnes peuvent avoir des copies), il n'y a pas de colonnes à utiliser ! Mais pour en conserver une, vous avez toujours besoin d'un identifiant unique pour chaque ligne de chaque groupe. Heureusement, Oracle a déjà quelque chose que vous pouvez utiliser. Le rowid. Toutes les lignes dans Oracle ont un rowid. Il s'agit d'un localisateur physique. C'est-à-dire qu'il indique où Oracle stocke la ligne sur le disque. Il est unique pour chaque ligne. Vous pouvez donc utiliser cette valeur pour identifier et supprimer des copies. Pour ce faire, remplacez min() par min(rowid) dans la suppression non corrélée :

delete films
where  rowid not in (
  select min(rowid)
  from   films
  group  by title, uk_release_date
)

0voto

Ashish sinha Points 77
create or replace procedure delete_duplicate_enq as
    cursor c1 is
    select *
    from enquiry;
begin
    for z in c1 loop
        delete enquiry
        where enquiry.enquiryno = z.enquiryno
        and rowid > any
        (select rowid
        from enquiry
        where enquiry.enquiryno = z.enquiryno);
    end loop;
 end delete_duplicate_enq;

0voto

sandeep gupta Points 29

Solution :

delete from emp where rowid in
(
    select rid from
    (
        select rowid rid,
        row_number() over(partition by empno order by empno) rn
        from emp
    )
    where rn > 1
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X