2009-11-25 11 views
1

J'ai deux bases de données avec une structure différente.MySQL fusionner des tables avec une structure différente

Tableau 1:

ch_code ch_def ch_weight 

Tableau 2:

address ch_code 

je dois fusionner ces deux tables, donc la structure ressemblerait à ceci:

ch_code ch_def ch_weight address 

Le nombre ou les lignes dans deux tableaux sont différents (le tableau 1 contient plus de données).

Dois-je utiliser merge, union .. autre chose?

Merci!

+0

Eh bien, cela dépend de ce que vous voulez sur la table résultante ... Il sera probablement utile si vous ajoutez des données d'échantillon. –

+0

Juste pour clarifier, voulez-vous dire que vous avez 2 tables dans la même base de données et que vous cherchez une requête qui aboutira aux colonnes que vous avez indiquées? – tloach

+0

Y a-t-il des colonnes qui relient les tables? Par exemple, un person_id qui représente la même ligne dans les deux tables. – wallyk

Répondre

1

est ici une solution qui devrait gérer les trois cas possibles:

  1. Il y a une valeur ch_code dans t1 qui est pas dans t2
  2. Il y a une valeur ch_code t2 qui est pas t1
  3. Il y a un ch_code valeur dans les deux instants t1 et t2

SELECT t1.ch_code, t1.ch_def, t1.ch_weight, '' as address from t1 where not exists (select * from t2 where t2.ch_code = t1.ch_code)

UNION

SELECT t2.ch_code, '' as ch_def, '' as ch_weight, t2.address from t2 where not exists (select * from t1 where t1.ch_code = t2.ch_code)

UNION

SELECT t1.ch_code, t1.ch_def, t1.ch_weight, t2.ch.address from t1 left join t2 on t1.ch_code = t2.ch_code

Une fois que vous avez obtenu ce que vous pouvez alors resultset faire votre INSERT INTO si vous avez une nouvelle table pour loger les données fusionnées.

+0

PS - Quelqu'un connaît le secret pour obtenir un bloc de code multiligne qui contient des traits de soulignement pour regarder à droite? Je devais me contenter de backticks sur chaque ligne. – BryanD

1

Si Tableau2 ne dispose que des données qui est inclus dans Table1 (il n'y a rien dans Table2 est pas au tableau 1), vous devriez être en mesure de faire quelque chose comme (en supposant Table3 a été déjà configuré):

INSERT INTO TABLE3 (ch_code, ch_def, ch_weight, address) 
SELECT Table1.ch_code, Table1.ch_def, Table1.ch_weight, Table2.address 
FROM Table1 LEFT JOIN Table2 on Table1.ch_code = Table2.ch_code 

(Je n'ai pas une installation MySQL à portée de main, donc votre syntaxe peut varier.)

Si vous avez des données dans Table2 qui ne correspondent pas aux données de Table1 (et que vous voulez conserver ces données), vous aurez besoin une FULL JOIN (si MySQL ne supporte pas cela, UNION a LEFT JOIN et RIGHT JOIN).