2010-02-02 13 views
0

Je souhaite écrire une requête qui fusionne deux bases de données Access 2000 en une seule. Chacun a 35 tables avec des champs identiques et principalement des données uniques. Certaines lignes auront la même "clé primaire", auquel cas la ligne de la base de données A devrait toujours avoir préséance sur la base de données B. J'utilise des guillemets autour de "clé primaire" parce que les bases de données sont générées sans clé ni relation. Par exemple:Accès - Fusionner deux bases de données de structure identique

Database A, table1

col1 col2 
Frank red 
Debbie blue 

Database B, table1

col1 col2 
Harry orange 
Debbie pink 

Et les résultats que je voudrais:

col1 col2 
Frank red 
Harry orange 
Debbie blue 

Ces bases de données sont générés et téléchargés par utilisateurs non-sql-savvy, donc je voudrais juste leur donner une requête pour copier et coller. Ils devront évidemment commencer par importer ou relier un DB [in] à un autre.

Je suppose que je vais devoir créer une troisième table avec la requête de résultats combinés, puis supprimer les deux autres. Idéalement, cependant, il suffirait d'ajouter les lignes de la base de données A à la base de données B (en remplaçant si nécessaire).

Je ne cherche bien sûr pas de réponse complète, j'espère juste obtenir des conseils pour savoir par où commencer. J'ai une certaine expérience mySQL et je comprends les bases des jointures. Est-il possible de faire cela en une seule requête, ou devrais-je en avoir une séparée pour chaque table?

MERCI !!

+0

pourquoi enlever 'sql' du titre? Je suis à la recherche d'une requête SQL en guise de réponse. – carillonator

Répondre

1

Que diriez-vous:

SELECT t.ID, t.Field1, t.Field2 INTO NewTable FROM 
(SELECT a.ID, a.Field1, a.Field2 
FROM Table1 A 
UNION 
SELECT x.ID, x.Field1, x.Field2 
FROM Table1 x IN 'C:\docs\db2.mdb' 
WHERE x.ID NOT IN (SELECT ID From Table1)) t 
+0

belle, merci. exactement ce que je cherchais. – carillonator

+0

Ce SQL suppose que les enregistrements dans les deux bases de données ayant le même ID sont en fait le même enregistrement. Si deux copies de la base de données divergeaient, il pouvait y avoir des ID qui se chevauchaient et qui n'étaient * pas * des enregistrements identiques, puisqu'elles étaient créées * après * les deux copies fourchues. –

+0

L'utilisateur semble être conscient de cela et mentionne que Debbie Blue est requise, pas l'enregistrement divergé de Debbie Pink. – Fionnuala

0

Il ne s'agit pas d'une solution SQL, mais cela peut fonctionner aussi bien que de dire à vos utilisateurs avertis non SQL de couper et coller des instructions SQL.

  1. Je suggère de définir une clé unique sur la table qui a la priorité (col1).
  2. Copiez ensuite toutes les données de la base de données B dans la table "maître".

Ceci échouera pour tous les doublons, mais insérera tous les 'nouveaux' enregistrements. Supprimer la contrainte de clé unique après que vous avez terminé si nécessaire. De votre question, il semble que vous ayez besoin de la table résultante dans la base de données B. Vous pouvez donc demander à vos utilisateurs de copier la table dans la base de données B avant de commencer ou après avoir terminé.

Questions connexes