bonjour !
le sujet est explicite je pense
je voudrais en fait supprimer les produits de ma table produit(pro_id,pro_nom) qui ont des noms identiques
si vous aviez une idée ...merci
bonjour !
le sujet est explicite je pense
je voudrais en fait supprimer les produits de ma table produit(pro_id,pro_nom) qui ont des noms identiques
si vous aviez une idée ...merci
Heu... naïvement je propose :Dis nous en un peu plus si ça ne correspond pas à ce que tu veux faire notamment en respectant les règles du forum et en indiquant ton SGBD
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DELETE FROM PRODUIT WHERE PRO_NOM LIKE 'BLABLA%';![]()
salut !
nan :p je peux pas faire ça je suis pas censer savoir le nom du produit
en fait le principe je pense serait de récupérer le nom des produit d'un coté, et de les comparer avec chaque nom de produit de la table mais en SQL hmm hmmm je bloque ...
ps : autant pour moi je teste ces requêtes sous SQL server mais bon peu importe le SGBD c'est du sql classique il me semble ça![]()
Et comment tu peux différencier les différents occurences ?
Un petit delete ...where id in ...having count(*) >1 mais il nous faut ton db design et un exemple.
Genre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DELETE FROM PRODUIT T1 WHERE PRO_NOM IN (SELECT COUNT(*) FROM PRODUIT T2 WHERE T1.PRO_NOM = T2.PRO_NOM GROUP BY t2.PRO_NOM HAVING COUNT(*)>1)
Le problême c'est qu'avec ca tu supprime toute les occurences hors je suppose que le but est d'en garder l'une d'elles. N'est ce pas betaphp?Envoyé par souellet
Exact ze_key!
Dans le cas où on veut garder un record, il faut utiliser une procédure et spécifier lequel des 2 enregistrements on veut garder.
La procédure fait une boucle et pour chaque record fait la vérification.
L'enregistrement valide peut, soit être le dernier entré ou le premier, si on a pas la ate on peut utiliser le RRN... y'a plein de possibilité.
C'est pour ça que pour une table d'une centaine d'enregistrements je ferai peut-être la purge manuellement.
Donc tu abandonnes ? tu le fais manuellement c'est ca ?
Sinon il te faut un crtère de décision pour en choisir un.
Je viens de penser à de quoi PRO_DATE étant une supposition...
Dans cet exemple on garde la date la plus récente.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DELETE FROM PRODUIT T1 WHERE PRO_NOM IN (SELECT COUNT(*) FROM PRODUIT T2 WHERE T1.PRO_NOM = T2.PRO_NOM GROUP BY t2.PRO_NOM HAVING COUNT(*)>1) AND PRO_DATE NOT IN (SELECT MAX(PRO_DATE) FROM PRODUIT T3 WHERE T3.PRO_NOM = T1.PRO_NOM)
hep !
DELETE FROM produit
WHERE pro_nom IN (SELECT COUNT(*) FROM produit p2
WHERE produit.pro_id = p2.pro_id
GROUP BY p2.pro_nom
HAVING COUNT(*)>1)
ça fonctionne mais j'ai ancune ligne affectée alors que j'ai des noms identques dans ma table :-(
et avec pro_nom dans la jointure j'ai une erreur :
Erreur de syntaxe lors de la conversion de la valeur varchar 'ok' vers une colonne de type de données int.
'ok' c'est le nom de mon produit![]()
Disons plutôt que j'utilise la manière la plus rapide... surtout quand c'est supposément fait une seule fois.Envoyé par ze_key
![]()
mais tu fait ce que tu veux faire est une suppression de doublons purement et simplement non ?
Si c'est bien alors va jetter un coup d'oeil sur l'article de sqlpro à ce propos (il est très intéressant à mon sens).
delete from produit
where produit.pro_id in
(select count(*) from produit, produit p1 where produit.pro_id=p1.pro_id
having count(*)>1)
avec cette requete je supprime 1 ligne à chaque fois ! lol
je vais liremerci !
en effet l'exemple est intéréssant ... mais il applique cela sur une table ou il y a 3 fois le même numéro... (33) c'est pas possible dans mon cas d'avoir ça...
Vu les exemples précédents, je suppose que le moteur autorise un alias dans le DELETE.
Essaye
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DELETE FROM PRODUIT T1 WHERE EXISTS (SELECT NULL FROM PRODUIT T2 WHERE T1.PRO_NOM = T2.PRO_NOM AND T1.PRO_DATE > T2.PRO_DATE)
Un champ date ou autre qui peut te servir pour garder le'enregistrement le plus récent ou mieux.Je viens de penser à de quoi PRO_DATE étant une supposition...
Il suffit de prendre n'importe quel élément discriminant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DELETE FROM PRODUIT T1 WHERE EXISTS (SELECT NULL FROM PRODUIT T2 WHERE T1.PRO_NOM = T2.PRO_NOM AND T1.PRO_ID < T2.PRO_ID)
jolie médiatça fonctionne très bien ! merci à vous tous !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager