Bonjour,
je cherche à supprimer des doublons dans une table sans y parvenir. Je veux supprimer toutes les lignes dont il existe la même valeur moins une lettre "Q".
Titi
TataQ => Ne pas supprimer puisque pas de "Tata" seul dans la table
Toto
TotoQ => A supprimer
Voila la requête qui me semble-t-il devrait parvenir à ce résulat, mais elle est extremement longue (infaisable) sur un petite table de 45000 lignes avec 6000 données à supprimer :
Code Requete interminable qui d'après moi devrait fonctionner : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT * FROM MaTable AS T1 WHERE EXISTS ( SELECT top 1 * FROM MaTable AS T2 WHERE T2.MaColonne & "Q" = T1.MaColonne);
J'ai essayé entre autres ceci sans succès :
Code Essais ne donnant pas de meilelurs résultats : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT * FROM MaTable AS T1 WHERE Right(T1.MaColonne,1) = "Q" AND EXISTS ( SELECT top 1 * FROM MaTable AS T2 WHERE T2.MaColonne like Left(T1.MaColonne, len(T1.MaColonne) -1)); SELECT * FROM MaTable AS T1 WHERE Right(T1.MaColonne,1) = "Q" AND EXISTS ( SELECT top 1 * FROM MaTable AS T2 WHERE T2.MaColonne & "Q" = T1.MaColonne);
Et curieusement, même si la requete suivante ne me retourne pas les bons résultats (elle retourne les données sans le "Q" à la fin dont il existe la même avec un "Q", alors que ce sont les "Q" que je veux supprimer, mais le nombre de résultats retournés est le bon avec cette requete), elle s'exécute instantanément sans que je comprenne pourquoi sa petite soeur que j'ai mise en premier ci-dessus ne fait pas de même .... :
Retourne 6074 lignes : Le nombre à supprimer, puisque correspond aux éléments sans "Q" qui existent dans la table en version avec "Q". Il me faut "juste" récupérer les correspondant avec le "Q" de chaque élément de cette table ...
Code Mauvaise requete mais execution instantanée ... : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT * FROM MaTable AS T1 WHERE EXISTS ( SELECT top 1 * FROM MaTable AS T2 WHERE T2.MaColonne = T1.MaColonne & "Q" );
Une autre solution, qui elle fonctionne (du moins s'exécute), mais ne retourne pas le bon nombre de valeurs, je ne sais pas pourquoi :
Retourne 6129 lignes (dont seulement 54 correspondent à celle qui en retourne 6074 ci-dessus)
Code Nombre de résultats différents de la précédente : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT * FROM MaTable AS T1 WHERE (Left(T1.MaColonne, Len(T1.MaColonne) - 1)) IN ( SELECT T2.MaColonne FROM MaTable AS T2 WHERE EXISTS ( SELECT TOP 1 * FROM MaTable AS T3 WHERE T3.MaColonne = T2.MaColonne & "Q"));
Bref, je patauge ....
Merci de votre aide
Partager