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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par loloviolo Voir le message
    Et la : Erreur SQL
    Saluton,
    Oui, mais quel message d'erreur ?
    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)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 17
    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
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    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
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    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
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 5
    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)

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, 18h06
  2. [MySQL] Delete doublons ERREUR
    Par mikathieut dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/09/2008, 16h30
  3. requete de delete de doublons relatifs
    Par caweb dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/01/2008, 10h26
  4. Réponses: 1
    Dernier message: 02/01/2008, 13h28
  5. [SQL Server 2005] DELETE sur des doublons
    Par Shakta dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/05/2007, 11h13

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