Comparer et supprimer

Résolu
t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Je souhaiterais savoir comment je pourrais faire pour comparer deux tables (A et B) d'une bd, et supprimer les doublons dans la table A. En prenant comme comparateur les champs nom, prénom, et date-naissance.

Merci

4 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    Bonjour,

    Une requête DELETE, avec, dans le WHERE, une sous-requête  (utilisant éventuellement un CONCAT )sur l'autre table avec les champs désirés...

    Un truc du genre

    DELETE FROM tableA
    WHERE CONCAT (nom,prenom,datenaiss) IN (
      SELECT CONCAT (nom,prenom,datenaiss) 
      FROM tableB
    )

    0
    1. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
       

      Bonjour jordane45.

      Je réponds un peu tard, mais j'étais absent.

      Si j'éceis :

      DELETE FROM genfamille.malfoidaquin
      WHERE CONCAT (nom,prenom,datenaiss) IN (
        SELECT CONCAT (nom,prenom,datenaiss) 
        FROM genfamille.daquin
      )

      j'ai comme erreur :

      #1305 - FUNCTION genfamille.CONCAT does not exist
       

      Et si je tente :

      DELETE FROM malfoidaquin
      WHERE CONCAT (nom,prenom,datenaiss) IN (
        SELECT CONCAT (nom,prenom,datenaiss) 
        FROM daquin
      )

      j'ai comme erreur :

      #1305 - FUNCTION genfamille CONCAT does not exist

      C'est comme si le CONCAT n'était pas reconnu !!!!!

      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention  
         

        Tu es bien sur mysql ? Quelle version ?

        0
  2. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     

    Je suis chez Free. C'est la 5.0.83

    Mais sinon, il y a d'autre moyen de faire ?

    0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    Essaye en ne mettant pas d'espace entre le nom de la fonction et la parenthèse ouvrante  CONCAT(  et non pas CONCAT (

    Sinon, essaye (là aussi sans espaces...) la fonction CONCAT_WS (je te laisse chercher la syntaxe pour l'utiliser)

    0
  4. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     

    Effectivement, si j'enlève l'espace entre CONCAT et (, le script fonctionne. Il m'a supprimé près de 300 enregistrements. Par contre, après vérification, de nombreux enregistrements de la table daquin sont toujours dans la table malfoidaquin. Et je ne sais pas ce qui a été supprimé. Heureusement que j'avais des sauvegardes des tables avant la manip ......!!!!

    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       

      Remplace le delete par un select *. Et regarde ce que ça te dit..

      0
      1. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         

        Le plus simple est que je compare les enregistrements un par un ! J'en ai juste un peu plus de 3000, mais ca ira plus vite ...........

        0