Comparer et supprimer

Résolu

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. Modérateur

    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. 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
    2. Modérateur
      @t671

      Tu es bien sur mysql ? Quelle version ?

      0
  2. Je suis chez Free. C'est la 5.0.83

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

    0
    1. Modérateur

      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
      1. 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. Modérateur

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

          0
        2. @jordane45

          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