Fusionner et comparer des BD
Résolu/Fermét671 Messages postés 1442 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 novembre 2024 - 10 août 2022 à 09:32
- Fusionner et comparer des BD
- Comment fusionner des pdf sans logiciel - Guide
- Fusionner des fichiers excel - Guide
- Scan bd ✓ - Forum Loisirs / Divertissements
- Excel fusionner deux cellules - Guide
- Impossible de fusionner des cellules excel ✓ - Forum Excel
12 réponses
1 août 2022 à 12:56
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 ?
1 août 2022 à 15:45
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 ???
1 août 2022 à 16:12
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)
1 août 2022 à 16:47
Mettre A à jour en prenant dans B.
KEY correspond à quoi ?
1 août 2022 à 16:49
KEY c'est la clé d'un enregistrement, qui est particulière à chaque table individuellement.
Tu n'as pas répondu à combien de tables ?
Et as tu de quoi charger en Mysql ton export GEDCOM, et enfin une fois chargé en Mysql, sont-ce les mêmes tables que ta base A ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question1 août 2022 à 17:58
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
1 août 2022 à 18:04
A tu devrais avoir une sauvegarde, B le fichier d'export pareil, tu peux recharger une nouvelle base
on pourrait créer une table C. Soit A fusionnée à B = C
oui mais cela repousse le problème des doublons, C est imparfaite
1 août 2022 à 18:24
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 !
1 août 2022 à 18:39
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)
1 août 2022 à 19:05
Mouais, je vais esse, mais je ne connais pas oracle.......
Il faudrait écrire en mysql : fusion table A+ B dans table C. Puis suppression des éléments comportant même nom, prénom et date de naissance. Mais je ne suis pas assez calé en php..... ????
Modifié le 1 août 2022 à 19:22
Pourquoi PHP ? Il faut faire du sql direct et on revient à insérer tout A dans C et insérer de B seuls ceux non déjà présents dans C :
INSERT into bddC.personne AS C SELECT * FROM bddB.personne AS B WHERE (B.nom, B.prenom, B.dateNais) NOT IN (select nom, prenom, dateNais FROM bddC.personne)
8 août 2022 à 09:50
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
8 août 2022 à 17:18
il faut peut être ne pas mettre AS C
et bien sur les tables individus et dameron doivent avoir exactement les mêmes champs
8 août 2022 à 12:05
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
8 août 2022 à 13:14
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.
8 août 2022 à 15:02
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.
9 août 2022 à 07:52
Peut-être
insert into c select * from a union select * from b
9 août 2022 à 09:30
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
9 août 2022 à 09:54
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.
9 août 2022 à 10:47
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.
8 août 2022 à 23:24
Ah là je ne pourrai t'aider.
9 août 2022 à 14:34
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) )
9 août 2022 à 17:58
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 !?
9 août 2022 à 18:09
C'est bon ! Il me manquait une colonne !
10 août 2022 à 09:32
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 ................
9 août 2022 à 16:38
ca y est jee pee. le premier script fonctionne :o)
Merci !