Fusionner et comparer des BD
Résolut671 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.
- Fusionner et comparer des BD
- Comment fusionner des pdf sans logiciel - Guide
- Fusionner mp3 - Télécharger - Audio & Musique
- Fusionner deux cellules excel - Guide
- Fusionner deux tableaux excel - Guide
- Télécharger bd pdf gratuit sans inscription - Forum PDF
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 ?
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 ???
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)
Mettre A à jour en prenant dans B.
KEY correspond à quoi ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionEn 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
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 !
Oui il existe des procédures. En voilà une que j'utilisais il y a déjà 30 ans, il faudra l'adapter à Mysql car elle elle pariculière à Oracle avec le pseudo champ ROWID
delete from &&table where (&&cle,rowid) in ( ( select &&cle,rowid from &&table where (&&cle) in ( select &&cle from &&table group by &&cle having count(*) > 1 ) ) minus ( select &&cle,min(rowid) from &&table group by &&cle having count(*) > 1 ) ) /
&&table et &&cle étant des variables demandées par oracle*sql lors de l'execution; on peut donc mettre &&table = personne &&cle = nom,prénom,date de naissance (nom colonnes)
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
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
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.
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
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) )
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 !?