MYSQL INSERT INTO существующих данных таблицы из 2 отдельных таблиц на ID - PullRequest
1 голос
/ 21 мая 2011

У меня есть таблица 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 ]

2 голосов
/ 21 мая 2011
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 голос
/ 21 мая 2011

Если соотношение между foo и bar является взаимно-однозначным и требуется с обеих сторон:

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