2011-05-20 1 views
1

J'ai une table 'new_foobar' qui est vide. il a les colonnes 'fbc_primary_key', 'fbc_two', fbc_three, et fbc_four.MYSQL INSERT INTO données de table existantes DE 2 tables distinctes ON id

par défaut fbc_three à 'pomme'

alors j'ai une table 'foo', avec des colonnes de la fc_pimary_key ', 'fc_two'. Et une table 'barre' avec les colonnes 'bc_primary_key', 'bc_two', 'bc_three'. Fbc_primary_key, bc_primary_key, et fc_primary_key, sont toutes les clés primaires de leurs tables respectives

comment insère fc_two, dans fbc_two, et bc_three dans fbc_four.

 
TABLE foo 
fc_primary_key | fc_two | 
------------------------- 
1    | hello | 
2    | goodbye| 

TABLE bar 
bc_primary_key | bc_two | bc_three | 
------------------------------------ 
1    | abc | 123  | 
2    | def | 456  | 

*NOTE bar and foo have a 1-to-1 relationship. 


TABLE foobar 
fbc_primary_key | fbc_two | fbc_three | fbc_four | 
--------------------------------------- 
/* empty */ 

...AFTER SOME SQL MAGIC.... 

TABLE foobar 
fbc_primary_key | fbc_two | fbc_three | fbc_four | 
--------------------------------------------------- 
1    | hello | apple  | 123  | 
2    | goodbye | apple  | 456  | 

Le problème que j'ai avec est, comment obtenir les colonnes de données à tomber sous la colonne foobar.

+0

Est-il toujours une entrée correspondante dans 'bar' pour chaque entrée' foo' (et vice-versa)? –

+0

barre et foo ont une relation 1-à-1. – user763444

Répondre

2
insert into foobar 
select 
    ifnull(f.fbc_primary_key, b.fbc_primary_key), 
    fbc_two, 
    fbc.three 
from 
    foo f 
    full outer join bar b on b.fbc_primary_key = f.fbc_primary_key 

Si vous voulez uniquement des enregistrements qui existent dans les deux tables, vous pouvez utiliser la jointure interne. Vous pouvez également ignorer l'ifnull, car f et b auront tous deux un identifiant.

1

Si la relation entre foo et bar est un à un et nécessaire des deux côtés:

INSERT INTO foobar (
    SELECT f.fc_primary_key, f.fc_two, b.bc_three 
    FROM foo f INNER JOIN bar b ON f.fc_primary_key = b.bc_primary_key); 
+2

@ La réponse de Golez est meilleure pour le cas générique. –

+0

+1 Battez-moi à la même réponse :) –