|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Bonjour,
J'ai une table sql avec plusieurs champs. J'aimerai tester si des doublons existent sur deux de ces colonnes dans ma table pour pouvoir les supprimer. Comment faire? Merci d'avance! |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
Bonjour,
tu peux faire ceci : Code sql :
|
||
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 528 ![]() |
Saluton,
Tu fais deux SELECT sur la même table chacun sur une des deux colonnes que tu renommes (AS) de manière identique dans les deux SELECT. Tu mets ces SELECTs en UNION ALL tu comptes dans un GROUP BY et tu ne retiens avec une clause HAVING que les items dont le comptage est supérieur à 1. Tu vas comme cela détecté les doublons (voire triplets ou plus) aussi bien entre les deux colonnes que dans chacune des colonnes.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 528 ![]() |
Plutôt marrant, nous avons eu deux interprétations de ton exposé de problème qui débouchent, chacune, sur une solution adaptée.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Voilà ce que j'ai fait:
J'ai crée une nouvelle colonne dans laquelle j'ai concaténé mes 2 champs. J'utilise donc cette colonne pour trouver les doublons: Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
un delete avec id IN(...) ?
|
|
|
00
|
|
|
#7 | ||
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Voilà ce que je fais mais j'ai une erreur:
Code :
Code :
#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 'c1 where c1.doublon in (SELECT c2.doublon FROM cv c2 WHERE c2.`upddt` >= '201' at line 1
|
||
|
|
00
|
|
|
#8 | ||||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
de mémoire je crois que la syntaxe avec des alias est celle ci :
Code sql :
Sinon attention à ton order, il s'effectuera APRES ton group by donc si tu souhaites récupérer toutes les dates décroissantes, c'est raté. J'ai l'habitude de faire même s'il y a surement mieux quelque chose du style : Code sql :
|
||||
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
bon apparemment la requête delete n'accepte pas d'alias.
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
Elle en accepte avec la syntaxe que je t'ai donné. Quel est le message d'erreur ?
|
|
|
00
|
|
|
#11 | ||
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Voici la requête:
Code :
Code :
#1093 - You can't specify target table 'c1' for update in FROM clause
|
||
|
|
00
|
|
|
#12 | ||
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Dites avec cette requête, je ne sélectionne que les doublons?
Code :
|
||
|
|
00
|
|
|
#13 |
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Est qu'un alter ignore add unique ne fonctionnerait pas dans mon cas?
Code :
ALTER IGNORE TABLE cv ADD UNIQUE INDEX(candidat_id, intitule_poste, ville, cp, email); |
|
|
00
|
|
|
#15 | ||
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Merci pour l'exemple et pour la doc!
Voilà ce que je fais: Code :
Code :
#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 'T WHERE T.cv_id < ANY (SELECT cv_id FROM cv T2 ' at line 2
|
||
|
|
00
|
|
|
#16 |
![]() ![]() |
MySQL ne respecte une fois de plus pas la norme et ne connais pas ANY.
Après quelques minutes de recherche dans le forum MySQL, la solution s'y trouve !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#17 | |||
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Malheureusement CinePhil, ça ne fonctionne toujours pas chez moi avec:
Code :
Citation:
Code :
ALTER IGNORE TABLE TabTest ADD UNIQUE INDEX(candidat_id, intitule_poste, ville, cp, email); |
|||
|
|
00
|
|
|
#18 | ||
![]() ![]() |
On a dit plus haut que l'utilisation d'alias dans un DELETE était à employer de la sorte :
Donc essaie cette syntaxe : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#19 | ||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
Comme envoyé et dit par mp...
Code sql :
|
||
|
|
00
|
|
|
#20 | |||
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Erreur
requête SQL: Documentation Code :
Citation:
|
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com