Comment dans une table enleveé les doublons
Résolu/Fermé
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
-
15 févr. 2008 à 12:28
DiabloAndSab Messages postés 80 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 19 février 2009 - 20 févr. 2008 à 15:17
DiabloAndSab Messages postés 80 Date d'inscription mardi 9 octobre 2007 Statut Membre Dernière intervention 19 février 2009 - 20 févr. 2008 à 15:17
A voir également:
- Comment dans une table enleveé les doublons
- Table ascii - Guide
- Supprimer les doublons excel - Guide
- Table des matières word - Guide
- Doublons photos - Guide
- Supprimer les doublons photos gratuit - Télécharger - Nettoyage
10 réponses
ceddec
Messages postés
148
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
10 mars 2012
82
20 févr. 2008 à 08:46
20 févr. 2008 à 08:46
Bonjour,
Désolé de ne pas pouvoir répondre plus vite mais j'ai quelques soucis de pc.
Sinon je crois avoir compris l'erreur:
Il s'agit en fait d'une erreur dans la sous requête. En effet, il est impossible de faire un count(distinct a, b). La solution est de concatener tout tes champs ainsi il ne devrait plus y avoir de problème.
La requête deviendrait :
et la deuxième solution :
Il est possible que les requêtes ne marchent pas si le champ Naissance n'est pas une chaine de caractère. Dans ce cas, il faut faire un cast :
Désolé de ne pas pouvoir répondre plus vite mais j'ai quelques soucis de pc.
Sinon je crois avoir compris l'erreur:
Il s'agit en fait d'une erreur dans la sous requête. En effet, il est impossible de faire un count(distinct a, b). La solution est de concatener tout tes champs ainsi il ne devrait plus y avoir de problème.
La requête deviendrait :
DELETE FROM insc_mdc_ancien2 t1 WHERE 1 < ( SELECT count( DISTINCT concat(Nom, Prenom, Naissance) ) FROM insc_mdc_ancien2 t2 WHERE t1.Nom = t2.Nom AND t1.Prenom = t2.Prenom AND t1.Naissance = t2.Naissance )
et la deuxième solution :
DELETE FROM insc_mdc_ancien2 t1 WHERE EXISTS ( SELECT * FROM insc_mdc_ancien2 t2 WHERE t1.Nom = t2.Nom AND t1.Prenom = t2.Prenom AND t1.Naissance = t2.Naissance HAVING count( DISTINCT concat(Nom, Prenom, Naissance) )>=2)
Il est possible que les requêtes ne marchent pas si le champ Naissance n'est pas une chaine de caractère. Dans ce cas, il faut faire un cast :
CAST(Naissance as VARCHAR)
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
2
20 févr. 2008 à 15:17
20 févr. 2008 à 15:17
J'ai un peu prés trouvé car je ne récupère pas tous les données mais ça fonction. Je créer une table en copiant la pécèdente puis je la vide et ensuite j'applique ma requête:
select distinct( Nom), Prenom, Naissance from insc_mdc_ancien2 order by Nom
et ensuite j'exporte les résultats de la requete vers ma nouvelle table.
Cependant quand on fait le transfert selon le nombre d'enregistrements Sql remet l'insert into ce qui arrete la procédure quand on fait un copié coller gloable. Voilà c'est tout.
Un très grand merci a ceddec qui a été le seul à m'aider. MERCI a TOI
select distinct( Nom), Prenom, Naissance from insc_mdc_ancien2 order by Nom
et ensuite j'exporte les résultats de la requete vers ma nouvelle table.
Cependant quand on fait le transfert selon le nombre d'enregistrements Sql remet l'insert into ce qui arrete la procédure quand on fait un copié coller gloable. Voilà c'est tout.
Un très grand merci a ceddec qui a été le seul à m'aider. MERCI a TOI
ceddec
Messages postés
148
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
10 mars 2012
82
15 févr. 2008 à 12:41
15 févr. 2008 à 12:41
Bonjour,
Une solution serait d'utiilser une sous requete. Ta requete principale efface toutes les lignes qui sont dans les lignes déjà examinées (fait par la sous-requete).
Dis autrement, la sous requete retourne toutes les lignes identiques à la ligne courante (de la requete principale) parmis celles qui ont déjà été examinées et si cette sous requete retourne une ligne, alors la requete principale effectue la suppression
Une solution serait d'utiilser une sous requete. Ta requete principale efface toutes les lignes qui sont dans les lignes déjà examinées (fait par la sous-requete).
Dis autrement, la sous requete retourne toutes les lignes identiques à la ligne courante (de la requete principale) parmis celles qui ont déjà été examinées et si cette sous requete retourne une ligne, alors la requete principale effectue la suppression
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
2
18 févr. 2008 à 09:37
18 févr. 2008 à 09:37
Bonjour à tous j'ai essayé une requete Sql mais elle ne fonctionne pas.
delete from insc_mdc_ancien2 where Nom, Prenom, Naissance Not In (
select distinct (Nom),Prenom,Naissance from insc_mdc_ancien2)
Merci d'avance pour votre aide!
delete from insc_mdc_ancien2 where Nom, Prenom, Naissance Not In (
select distinct (Nom),Prenom,Naissance from insc_mdc_ancien2)
Merci d'avance pour votre aide!
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
2
15 févr. 2008 à 13:49
15 févr. 2008 à 13:49
Ca serait dans ce genre la?
Delete from ins_mdc_ancien
Select nom, prenom, datenaiss from ins_mdc_ancien
where nom=nom and prenom=prenom and datenaiss=datenaiss;
Sinon est ce que quelqu'un pourrait me donner un exemple...
Merci d'avance
Delete from ins_mdc_ancien
Select nom, prenom, datenaiss from ins_mdc_ancien
where nom=nom and prenom=prenom and datenaiss=datenaiss;
Sinon est ce que quelqu'un pourrait me donner un exemple...
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
2
15 févr. 2008 à 14:59
15 févr. 2008 à 14:59
Vu que personne me répond je dois mal m'expliquer. Donc je voudrais retiré tous les doublons (les doublons sont identifiables par 3 champs nom, prenom et date naissance) présents dans ma table.
Merci de votre aide
Merci de votre aide
ceddec
Messages postés
148
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
10 mars 2012
82
18 févr. 2008 à 14:04
18 févr. 2008 à 14:04
Bonjour,
la requete serait plus du genre :
delete from insc_mdc_ancien2 t1
where 1 < (select count(distinct nom, prenom, datenais)
from insc_mdc_ancien2 t2
where t1.nom= t2.nom and t1.prenom = t2.prenom and t1.datenais=t2.datenais)
J'ai pas testé cette requete mais ca peut te donner une idée
Voici un lien qui parle des sous-requetes et qui pourra t'aider
https://sqlpro.developpez.com/cours/sqlaz/sousrequetes/
Bon courage
la requete serait plus du genre :
delete from insc_mdc_ancien2 t1
where 1 < (select count(distinct nom, prenom, datenais)
from insc_mdc_ancien2 t2
where t1.nom= t2.nom and t1.prenom = t2.prenom and t1.datenais=t2.datenais)
J'ai pas testé cette requete mais ca peut te donner une idée
Voici un lien qui parle des sous-requetes et qui pourra t'aider
https://sqlpro.developpez.com/cours/sqlaz/sousrequetes/
Bon courage
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
2
18 févr. 2008 à 14:38
18 févr. 2008 à 14:38
Merci pour ta réponse.
Par contre MySql détecte une erreur:
Erreur
requête SQL: Documentation
DELETE FROM insc_mdc_ancien2 t1 WHERE 1 < ( SELECT count( DISTINCT nom, prenom, datenais )
FROM insc_mdc_ancien2 t2
WHERE t1.nom = t2.nom
AND t1.prenom = t2.prenom
AND t1.datenais = t2.datenais )
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where 1 < (select count(distinct nom, prenom, datenais)
from insc_mdc_ancien2 t' at line 2
Si vous avez une idées merci de me la faire parvenir!
Merci d'avance.
Par contre MySql détecte une erreur:
Erreur
requête SQL: Documentation
DELETE FROM insc_mdc_ancien2 t1 WHERE 1 < ( SELECT count( DISTINCT nom, prenom, datenais )
FROM insc_mdc_ancien2 t2
WHERE t1.nom = t2.nom
AND t1.prenom = t2.prenom
AND t1.datenais = t2.datenais )
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where 1 < (select count(distinct nom, prenom, datenais)
from insc_mdc_ancien2 t' at line 2
Si vous avez une idées merci de me la faire parvenir!
Merci d'avance.
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
2
18 févr. 2008 à 16:09
18 févr. 2008 à 16:09
Je me rapproche mais je trouve pas ce qui cloche:
Erreur
requête SQL: Documentation
DELETE t1 FROM insc_mdc_ancien2 WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
MySQL a répondu:Documentation
#1109 - Unknown table 't1' in MULTI DELETE
Merci Ceddec vu qu'il n'y a que toi qui m'aide...
Erreur
requête SQL: Documentation
DELETE t1 FROM insc_mdc_ancien2 WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
MySQL a répondu:Documentation
#1109 - Unknown table 't1' in MULTI DELETE
Merci Ceddec vu qu'il n'y a que toi qui m'aide...
ceddec
Messages postés
148
Date d'inscription
dimanche 31 juillet 2005
Statut
Membre
Dernière intervention
10 mars 2012
82
18 févr. 2008 à 20:33
18 févr. 2008 à 20:33
De rien
Pour ta dernière requete il faut mettre le t1 après le nom de ta table :
DELETE FROM insc_mdc_ancien2 t1
WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
Si cette requete ne marche pas, tu peux essayer cette variante (il faut MySql 4.1.0 minimum) :
DELETE FROM insc_mdc_ancien2 t1
WHERE EXISTS ( SELECT *
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance
HAVING count( DISTINCT Nom, Prenom, Naissance )>=2)
Pour ta dernière requete il faut mettre le t1 après le nom de ta table :
DELETE FROM insc_mdc_ancien2 t1
WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
Si cette requete ne marche pas, tu peux essayer cette variante (il faut MySql 4.1.0 minimum) :
DELETE FROM insc_mdc_ancien2 t1
WHERE EXISTS ( SELECT *
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance
HAVING count( DISTINCT Nom, Prenom, Naissance )>=2)
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
2
19 févr. 2008 à 09:31
19 févr. 2008 à 09:31
Je me rend que j'ai oublié de te spécifié la version que j'utilise. En faite je travail sous wamp5 dont MySql 5.0.45 et du php5.
Pour la première requete j'obtiens ça:
Erreur
requête SQL: Documentation
DELETE FROM insc_mdc_ancien2 t1 WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancie' at line 2
Et pour la deuxieme requete j'obtiens ça:
Erreur
requête SQL: Documentation
DELETE FROM insc_mdc_ancien2 t1 WHERE EXISTS (
SELECT *
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance
HAVING count( DISTINCT Nom, Prenom, Naissance ) >=2
)
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE EXISTS ( SELECT *
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1' at line 2
Par contre quand je place le t1 comme ceci il me demande une vrai validation (Voulez vous vraiment executer cette requête mais ensuite il y a un message d'erreur
Erreur
requête SQL: Documentation
DELETE t1 FROM insc_mdc_ancien2 WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
MySQL a répondu:Documentation
#1109 - Unknown table 't1' in MULTI DELETE
Merci de ton aide
Pour la première requete j'obtiens ça:
Erreur
requête SQL: Documentation
DELETE FROM insc_mdc_ancien2 t1 WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancie' at line 2
Et pour la deuxieme requete j'obtiens ça:
Erreur
requête SQL: Documentation
DELETE FROM insc_mdc_ancien2 t1 WHERE EXISTS (
SELECT *
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance
HAVING count( DISTINCT Nom, Prenom, Naissance ) >=2
)
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE EXISTS ( SELECT *
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1' at line 2
Par contre quand je place le t1 comme ceci il me demande une vrai validation (Voulez vous vraiment executer cette requête mais ensuite il y a un message d'erreur
Erreur
requête SQL: Documentation
DELETE t1 FROM insc_mdc_ancien2 WHERE 1 < ( SELECT count( DISTINCT Nom, Prenom, Naissance )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
MySQL a répondu:Documentation
#1109 - Unknown table 't1' in MULTI DELETE
Merci de ton aide
DiabloAndSab
Messages postés
80
Date d'inscription
mardi 9 octobre 2007
Statut
Membre
Dernière intervention
19 février 2009
2
20 févr. 2008 à 11:21
20 févr. 2008 à 11:21
Je crois que dans cette page y a peut être une solution: http://translate.google.com/...
S'il est documentée dans ces pages, cela prend un peu de chasse pour confirmer cette modification incompatible v3.23 à v4.1:
If you delete all rows from a table with DELETE FROM tablename, then add some new rows with INSERT INTO tablename, an AUTO_INCREMENT field would start again from 1 using MySQL v3.23.
Si vous supprimez toutes les lignes d'une table avec DELETE FROM tablename, puis ajouter de nouvelles lignes avec INSERT INTO tablename, un champ AUTO_INCREMENT serait à nouveau à compter de 1 en utilisant MySQL v3.23.
Dommage que ce soit de l'anglais.
Je vais essayer ce qu'il ont dit.
S'il est documentée dans ces pages, cela prend un peu de chasse pour confirmer cette modification incompatible v3.23 à v4.1:
If you delete all rows from a table with DELETE FROM tablename, then add some new rows with INSERT INTO tablename, an AUTO_INCREMENT field would start again from 1 using MySQL v3.23.
Si vous supprimez toutes les lignes d'une table avec DELETE FROM tablename, puis ajouter de nouvelles lignes avec INSERT INTO tablename, un champ AUTO_INCREMENT serait à nouveau à compter de 1 en utilisant MySQL v3.23.
Dommage que ce soit de l'anglais.
Je vais essayer ce qu'il ont dit.
20 févr. 2008 à 11:10
Erreur
requête SQL: Documentation
DELETE FROM insc_mdc_ancien2 t1 WHERE EXISTS (
SELECT *
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance
HAVING count( DISTINCT concat( Nom, Prenom, Naissance ) ) >=2
)
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE EXISTS ( SELECT *
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1' at line 2
Erreur
requête SQL: Documentation
DELETE FROM insc_mdc_ancien2 t1 WHERE 1 < ( SELECT count( DISTINCT concat( Nom, Prenom, Naissance ) )
FROM insc_mdc_ancien2 t2
WHERE t1.Nom = t2.Nom
AND t1.Prenom = t2.Prenom
AND t1.Naissance = t2.Naissance )
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE 1 < ( SELECT count( DISTINCT concat(Nom, Prenom, Naissance) )
FROM insc_m' at line 2
C'est pas grave car j'ai beaucoup de choses à faire nous je m'occupe en attendant ta réponse.
Par contre dis le moi si tu sèche que je ne t'attende pas trop.
Merci de ton aide qui reste bien la seule à s'être intéressé à mon problème.