Fusionner et comparer des BD

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

Bonjour,

J'ai une base MYSQL avec des données qui dates de 4 ou 5. Ce sont des données généalogique.

A la maison, je travaille sous Hérédis14 qui est un logiciel de généalogie. Les éléments sont au format GEDCOM, et à jour par rapport à ma base mysql.

Je peux exporter ma base hérédis en gedcom vers ma base mysql. Mais je vais avoir des doublons !!!

Il faudrait que je puisse comparer ma base mysql avec ma base hérédis gedcom pour supprimer les doublons0.

Comment faire ? Merci.

12 réponses


 

Bonjour,

Chacun pourra procéder à sa façon.

La base Hérédis étant la plus récente, je l'exporterais vers une nouvelle base Mysql vide. Puis avec des requêtes entre les 2 bdd (ancienne et nouvelle) j'insèrerais les données de l'ancienne non présentes dans la nouvelle.

Il y a combien de tables et maitrises-tu les liens entre elles ?


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

Merci jee pee.

J'avais pensez à cette solution, mais je ne maitrise pas trop pour éffectuer des requêtes .....

Ma plus grosse table comprend 11520 enregistrement.

En supposant que j'ai deux bases mysql. La A (ancienne), et la B (nouvelle et plus complète). Quelle requête dois-je faire pour que les enregistrement qui se trouvent sur A et sur B ne soient pas pris en compte ? Peut-être créer une base C qui fait le trie ???

0

 

Que veux tu faire, mettre A à jour en prenant dans B, ou mettre B à jour en prenant dans A ?

Voila le principe d'un insert pour le premier cas

INSERT into bddA.table1 AS A SELECT * FROM bddB.table1 AS B WHERE B.KEY NOT IN (select KEY FROM bddA.table1)
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 

Mettre A à jour en prenant dans B.

KEY correspond à quoi ?

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 

En tout, j'aurais 3 ou 4 tables à fusionner entre elles. L'élément clé qui relie chaque table peut-être le numéro du conjoint (num_cj). En transformant la base hérédis en gedcom puis mysql, les num_cj de rattachement ne sont plus les mêmes. Mais je peux les modifier.

Pour éviter de toucher les tables A et B, on pourrait créer une table C. Soit A fusionnée à B = C 

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

Je n'ai qu'un fichier gedcom complet. Et une base mysql incomplète.

Après la fusion, est-il possible de supprimer les doublons en cherchant les égalités sur nom, prénom, date naissance ?

si deux éléments similaire, on en supprime un !

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

Bonjour. J'étais absent quelques temps, mais maintenant je continue mon histoire.

Je veux donc insérer la table B dans A, en évitant les doublons.

J'ai exécuté une requête sur ma base en passant par le phpadmin de Free.

​INSERT into genfamille.individus AS C SELECT * FROM genfamille.dameron AS B
WHERE (B.nom, B.prenom, B.dateNais) NOT IN (select nom, prenom, dateNais FROM genfamille.individus)

​

J'ai comme erreur en retour : 

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 'AS C SELECT * FROM genfamille.dameron AS B WHERE (B.nom, B.prenom, B.dateNais) ' at line 1

0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 277
 

Bonjour,

heredis a un outil pour détecter les doublons https://help.heredis.com/verification-des-doublons/

tu pourrais faire un test sur une copie de ta base pour voir s'il est suffisamment performant.
eric


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

Ce n'est pas sur ma base hérédis que j'ai des doublons.

J'ai une base MYSQL dont j'ai perdu une partie. Je veux copier ma base hérédis sur ma base mysql, en évitant de copier les doublons de hérédis sur mysql.

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

En faite, je cherche à fusionner deux tables mysql (A+B vers C) en vérifiant qu'il n'y ai pas de doublon dans C.

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention  
 

Peut-être 

insert into c
select * from a
union
select * from b
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Bonjour yg_be, et merci de m'aider. J'ai passer la commande 

insert into individus_result select * from individus union select * from dameron

et j'ai eu l'erreur en retour : Duplicate entry '2' for key 1

Pour jee_pee :

j'ai passer la commande :

​INSERT into individus SELECT * FROM dameron
WHERE (nom, prenom, date_naissance FROM dameron) NOT IN (select nom, prenom, date_naissance FROM individus)

et j'ai eu l'erreur : 

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 '​INSERT into individus SELECT * FROM dameron WHERE (nom, prenom, date_naissan' at line 1

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention  
 

La table "individus_result" est bien vide au départ?

Pour moi, "pas de doublon" signifie pas "deux enregistrements totalement identiques".  Je pense quen dans ton cas, cela signifie autre chose.

0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Oui, la table "individus_result" est bien vide.

Pas de doublon signifie bien pas deux enregistrement totalement identique. C'est pourquoi je pense faire le filtre sur nom, prénom et date de naissance.

Dans la table individus, on peut donc retrouver la même personne que dans la table dameron. 

0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 277
 

Ah là je ne pourrai t'aider.


0

 
INSERT into individus SELECT * FROM dameron
WHERE (nom, prenom, date_naissance FROM dameron) NOT IN (select nom, prenom, date_naissance FROM individus)

Le FROM dans le WHERE ???

INSERT into individus 
SELECT * FROM dameron AS B
WHERE (B.nom, B.prenom, B.dateNais) NOT IN (select nom, prenom, dateNais FROM individus)

ou avec ()

INSERT into individus 
( SELECT * FROM dameron AS B
WHERE (B.nom, B.prenom, B.dateNais) NOT IN (select nom, prenom, dateNais FROM individus) )

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

En faisant des tests, je remarque des erreurs.

En fait, il faudrait que s'il y a doublon, ce soit la table dameron qui prime. Donc je pense qu'il faut inverser les tables dans le script et écrire :

INSERT into dameron 
SELECT * FROM individus AS B
WHERE (B.nom, B.prenom, B.date_naissance) NOT IN (select nom, prenom, date_naissance FROM dameron)

Mais là j'ai l'erreur : Column count doesn't match value count at row 1

Je n'ai pas changé les colonnes .... Et si ça marche dans un sens, ça peut marcher dans l'autre !?

0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11 > t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention  
 

C'est bon ! Il me manquait une colonne !

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

Dans ma requête 

INSERT into dameron 
SELECT * FROM individus AS B
WHERE (B.nom, B.prenom, B.date_naissance) NOT IN (select nom, prenom, date_naissance FROM dameron)

j'ai tous les dameron en double ................

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

ca y est jee pee. le premier script fonctionne :o)

Merci !

0