IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

suppression produit avec même nom


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 85
    Points : 59
    Points
    59
    Par défaut suppression produit avec même nom
    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

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Heu... naïvement je propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM PRODUIT
    WHERE PRO_NOM LIKE 'BLABLA%';
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    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

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    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.

  5. #5
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    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)

  6. #6
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Citation Envoyé par souellet
    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?

  7. #7
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    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.

  8. #8
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Donc tu abandonnes ? tu le fais manuellement c'est ca ?
    Sinon il te faut un crtère de décision pour en choisir un.

  9. #9
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Je viens de penser à de quoi PRO_DATE étant une supposition...
    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)
    Dans cet exemple on garde la date la plus récente.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    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

  11. #11
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par ze_key
    Donc tu abandonnes ? tu le fais manuellement c'est ca ?
    Sinon il te faut un crtère de décision pour en choisir un.
    Disons plutôt que j'utilise la manière la plus rapide... surtout quand c'est supposément fait une seule fois.

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    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).

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    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 lire merci !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    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...

  15. #15
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    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)

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    salut Média

    j'ai pas de pro_date dans ma base.

  17. #17
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Je viens de penser à de quoi PRO_DATE étant une supposition...
    Un champ date ou autre qui peut te servir pour garder le'enregistrement le plus récent ou mieux.

  18. #18
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    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)

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 85
    Points : 59
    Points
    59
    Par défaut
    jolie médiat ça fonctionne très bien ! merci à vous tous !

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2010, 23h36
  2. Duplicate target avec même nom.
    Par beanl dans le forum Administration
    Réponses: 4
    Dernier message: 08/08/2008, 16h36
  3. Réponses: 4
    Dernier message: 16/01/2007, 19h48
  4. requete sur 2 tables liées avec même nom de champs
    Par Australia dans le forum Access
    Réponses: 5
    Dernier message: 02/02/2006, 11h38
  5. ASP champs avec même nom
    Par pete007 dans le forum ASP
    Réponses: 8
    Dernier message: 03/05/2004, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo