2009-06-25 4 views
0

J'ai une table avec plusieurs entiers comme clé primaire. L'un d'eux est un compteur. Je dois retirer le compteur de la clé. La suppression du compteur de la clé entraînera la duplication de nombreuses lignes (avec des valeurs de compteurs différentes mais tous les autres éléments clés identiques).Comment réparer les données après avoir changé de clé

J'ai besoin d'une requête qui va supprimer tous les doublons et ne laisser que la ligne avec la valeur du compteur la plus élevée. Toute aide est appréciée.

Répondre

0

Que diriez-vous ceci:

create table foo (
    a number, 
    b number, 
    c number, 
    constraint pk_foo primary key (a, b, c) 
); 
insert into foo (a, b, c) values (0, 0, 0); 
insert into foo (a, b, c) values (0, 0, 1); 
insert into foo (a, b, c) values (0, 1, 0); 
insert into foo (a, b, c) values (0, 1, 1); 
insert into foo (a, b, c) values (1, 0, 0); 
insert into foo (a, b, c) values (1, 0, 1); 
insert into foo (a, b, c) values (1, 1, 0); 
insert into foo (a, b, c) values (1, 1, 1); 
delete from foo t1 
where t1.c not in (
     select max(t2.c) 
      from foo t2 
      group by a, b 
     ) 
; 
select * from foo; 

PS: Vous devrez supprimer avant enlever c de la clé primaire.

+0

Cela ne supprimera-t-il pas toutes les lignes avec une occurrence? – Nir

+0

Modifié pour inclure un exemple de travail: Le select ne retournera que les lignes où c = 1. – l0b0

Questions connexes