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

Requêtes MySQL Discussion :

Pb DELETE doublons


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Pb DELETE doublons
    Salut,

    Me basant sur le très bon tutoriel sur la suppression des doublons :
    http://sqlpro.developpez.com/cours/doublons/

    Ma table étant déjà pouvue d'une clé user_id, je fais donc la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM   users T
    WHERE  T.user_id > ANY 
    (SELECT user_id FROM users T2 WHERE T.user_id <> T2.user_id AND T.user_email = T2.user_email)
    Ceci me retourne bien la liste des doublons à supprimer. Je passe donc à la suppression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DELETE
    FROM   users T
    WHERE  T.user_id > ANY 
    (SELECT user_id FROM users T2 WHERE T.user_id <> T2.user_id AND T.user_email = T2.user_email)
    Et la : Erreur SQL

    Je ne comprends pas. Merci de votre aide.
    mysqld Ver 4.1.12 for mandriva-linux-gnu on i586 (Source distribution)
    LoLoVioLo

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par loloviolo Voir le message
    Et la : Erreur SQL
    Saluton,
    Oui, mais quel message d'erreur ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Failed to execute SQL : SQL DELETE FROM users T WHERE T.user_id > ANY (SELECT user_id FROM users T2 WHERE T.user_id <> T2.user_id AND T.user_email = T2.user_email) failed : 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 T.user_id > ANY (SELECT user_id FROM users T2 WHERE T.user_id <> T2.user' at line 1

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    J'ai le même problème et le même message d'erreur.
    Il semble que ce soit l'alias de la table à "DELETEr" qui pose problème alors j'ai enlevé l'alias et mis le nom complet de la table dans le WHERE de la sous-requête, tout en conservant le second alias dans la sous-requête.

    En gros j'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DELETE  
    FROM source_producteurs 
    WHERE COLID > ANY(   SELECT COLID
      FROM source_producteurs p2
      WHERE source_producteurs.COLID <> p2.COLID
        AND source_producteurs.ID_PRODUCT = p2.ID_PRODUCT
    )

    Et là MySQL me répond, assez logiquement :
    #1093 - You can't specify target table 'source_producteurs' for update in FROM clause

    Faut-il passer par une table temporaire ou y a t-il un autre moyen ?
    Dans un message sur ce sujet j'ai vu une syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE FROM t1
    USING latable t1
    WHERE...

    Alors j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DELETE
    FROM p1
    USING source_producteurs p1
    WHERE p1.COLID > ANY(
     
       SELECT p2.COLID
      FROM source_producteurs p2
      WHERE p1.COLID <> p2.COLID
        AND p1.ID_PRODUCT = p2.ID_PRODUCT
    )

    Mais :
    #1093 - You can't specify target table 'p1' for update in FROM clause

  5. #5
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    J'ai fini par passer par une table temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE  TEMPORARY  TABLE t SELECT COLID, ID_PRODUCT
    FROM source_producteurs;
    # Nombre d'enregistrements affectés : 347514
     ALTER  TABLE t ADD  CONSTRAINT  PRIMARY  KEY ( COLID ) ,
     ADD  INDEX ( ID_PRODUCT ) ;
    # Nombre d'enregistrements affectés : 347514
     DELETE  FROM source_producteurs WHERE COLID & gt;
     
    ANY( SELECT t.COLID
    FROM t
    WHERE source_producteurs.COLID & lt ;  & gt;
     
    t.COLID AND source_producteurs.ID_PRODUCT = t.ID_PRODUCT
    )
    # Nombre d'enregistrements affectés : 3097

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Avec plus d'un an de retard, une solution nette et sans bavure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER IGNORE TABLE ma_table ADD UNIQUE INDEX(champ_1,champ_2);
    (trouvé avec google sur http://blogmotion.fr/programmation/p...ppression-1588)

  7. #7
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Et ben ! Il fallait la trouver celle là !

Discussions similaires

  1. [phpMyAdmin] problème DELETE doublons bdd MySQL
    Par stephane52 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 16/10/2014, 19h06
  2. [MySQL] Delete doublons ERREUR
    Par mikathieut dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/09/2008, 17h30
  3. requete de delete de doublons relatifs
    Par caweb dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/01/2008, 11h26
  4. Réponses: 1
    Dernier message: 02/01/2008, 14h28
  5. [SQL Server 2005] DELETE sur des doublons
    Par Shakta dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/05/2007, 12h13

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