|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Étudiant Inscription : janvier 2013 Messages : 4 ![]() |
Bonjour,
Je suis confronté a un problème, en apparence simple mais qui me pose beaucoup de soucis (principalement parce que je suis pas très à l'aise avec le SQL également). J'ai plusieurs base a "nettoyer", elles ont toute une architecture différentes (autant sur le nombre de variable, que sur leurs type ou leurs taille). Pour schématiser le problème, j'ai créer une base de test simple : Code :
Je peux pas les garder dans ma base, ces lignes représentent juste une perte d'information. J'arrive a traiter le cas où deux lignes sont strictement identique (doublons parfait) et à supprimer toutes ces lignes. J'ai naïvement fait un algorithme qui compare chaque variable avec les variables des lignes suivantes mais l'algo est absolument pas évolutif et absolument pas pratique (pour 4 variables, 4*4 IF différents ...) Il me faudrait un algo qui puisse se déplacer de variables en variables sans utiliser leurs noms et qui s'arrête quand la ligne ne contient plus de variable à comparer (comme une boucle FOR pour parcourir un tableau) mais j'ai aucunes idées de comment faire ... Si vous avez une idée de comment éclairer ma lanterne, je vous remercie d'avance ( et si jamais je suis pas très clair dans mes explications, je peux toujours ré expliquer |
||
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() |
CREATE TABLE temptable AS SELECT DISTINCT nvl (var1,'vide'),nvl (var2,'vide'),nvl (var3,'vide'),nvl (var4,'vide') FROM tatable;
Tu contrôle tes données. TRUNCATE tatable; INSERT INTO tatable SELECT * FROM temptable; jko
__________________
OCP 11g, RAC and Performance & Tuning Expert 11g RMAN Backup & Recovery, Data Guard and Grid Control |
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Étudiant Inscription : janvier 2013 Messages : 4 ![]() |
Donc si j'ai bien compris, l'idée est de créer une table contenant tout ce qui est différent de la ligne :
nvl (var1,'vide'),nvl (var2,'vide'),nvl (var3,'vide'),nvl (var4,'vide') Mais ca me reviens davantage a enlever ce qui est différent plus que la perte d'information en soit, il me semble. Imaginons : Code :
Code :
doit etre conservé en vu d'une futur fusion. |
||||
|
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() |
Non, seul la ligne 5 disparait.
jko
__________________
OCP 11g, RAC and Performance & Tuning Expert 11g RMAN Backup & Recovery, Data Guard and Grid Control |
|
00
|
|
|
#5 |
|
Invité de passage
![]() Étudiant Inscription : janvier 2013 Messages : 4 ![]() |
Oui, c'est le cadre des doublons parfait (toute les variables contiennent exactement la meme chose qu'un autre champs).
J'essaye de cibler les doublons en perte d'information ... |
|
|
00
|
|
|
#6 |
|
Membre chevronné
![]() François Inscription : février 2010 Messages : 395 ![]() |
C'est vous qui connaissez les règles, et à moins de les écrire explicitement ici dans un exemple complet, on ne peut rien faire.
Ainsi, dans votre exemple précédent, vous gardez: De ce que j'ai compris, vous souhaitez à l'étape suivante les fusioner pour obtenir A1 B1 C1 D1 Mais dans le cas suivant, vous faite quoi? Et pourquoi la solution ne serait-elle pas A1 B3 C1 D1? Bref, sur quoi vous basez vous pour décider de ce qu'il faut faire ? ![]() Si vous n'avez pas de règle générale, on ne peut pas vous aider, et la solution manuelle de jkofr fonctionne toujours. Pour revenir à votre problème original: Vous devriez jeter un oeil du côté des contraintes, UNIQUE ou CHECK afin d'éviter ce problème à l'avenir. Ca va rien résoudre tout de suite, mais ça vous évitera de devoir refaire la même chose dans 6mois. |
|
|
00
|
|
|
#7 | |||
|
Membre Expert
![]() Inscription : août 2009 Messages : 1 013 ![]() |
Citation:
Personnellement je ferai chose du genre (j'ai utilisé le rowid faute d'avoir la clé primaire de la table, s'il y en a une) [et c'est non testé/brouillon] : Code :
|
|||
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() François Inscription : février 2010 Messages : 395 ![]() |
Mais quand il souhaite garder A1 C1 D1 et B1 C1 D1, le second tuple n'est pas contenu dans le premier.
Vrai que j'ai bruler une étape en parlant de la fusion. Il ne faut pas lire cette phrase là! Enfin, à voir plus tard par Splasher |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Étudiant Inscription : janvier 2013 Messages : 4 ![]() |
En fait, pour le traitement de ma base, j'identifie plusieurs étapes de nettoyage :
- Enlever les doublons parfait. - Enlever les doublons en perte d'information. - Fusionner les lignes pour prendre le l'information éparpiller. - Enlever les similaires avec un Algo style levenshtein. L'étape des doublons parfait est déjà faite. J'essaye de faire celle des doublons en perte d'information. Je vais essayer le script de Rei Ichido en l'adaptant a ma base |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com