MYSQL INSERT INTO现有表数据来自2个单独的表ON id

时间:2011-05-20 22:19:04

标签: mysql sql join insert

我有一张表'new_foobar'是空的。它有'fbc_primary_key','fbc_two',fbc_three和fbc_four。

fbc_three默认为'apple'

然后我有一个表'foo',列'fc_pimary_key','fc_two'。还有一个表'bar',列'bc_primary_key','bc_two','bc_three'。

fbc_primary_key,bc_primary_key和fc_primary_key都是各自表格的主键。

如何将fc_two插入fbc_two,将bc_three插入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      |

我遇到的问题是,如何将数据列放在foobar列下。

2 个答案:

答案 0 :(得分: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 

如果您只想要两个表中都存在的记录,则可以使用内部联接。你也可以跳过ifnull,因为f和b都有id。

答案 1 :(得分:1)

如果foobar之间的关系是一对一的,双方都需要:

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);