2009-11-25 110 views
1

我有兩個不同結構的數據庫。MySQL合併不同結構的表

表1:

ch_code ch_def ch_weight 

表2:

address ch_code 

我需要合併這兩個表,所以結構看起來像:

ch_code ch_def ch_weight address 

數量或行在兩個表中是不同的(表1有更多的數據)。

我應該使用mergeunion ..別的嗎?

謝謝!

+0

那麼,這取決於你想要什麼在結果表... 這可能會幫助,如果你添加一些示例數據。 – 2009-11-25 19:58:39

+0

只是爲了澄清,你的意思是你在同一個數據庫中有兩個表,並且正在尋找一個將導致你所指示的列的查詢? – tloach 2009-11-25 19:59:16

+0

是否有與表關聯的列?例如,表示兩個表中相同行的person_id。 – wallyk 2009-11-25 20:02:05

回答

1

這裏的應處置三種可能的情況的解決方案:

  1. 有一個在T1一ch_code值,這不是在T2
  2. 有一個在T2中的ch_code值,這不是在T1
  3. 有一個ch_code在T1和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

一旦你獲得的結果集,那麼你可以做你的INSERT INTO如果你有一個新表對住房的合併數據。

+0

PS - 任何人都知道獲取包含下劃線看起來正確的多行代碼塊的祕密嗎?我不得不在每條線上安排反攻。 – BryanD 2009-11-25 20:17:36

1

如果表2只具有隨機配備在表1(即沒有什麼表2中,這不是在表1),你應該能夠做到像(假設表3已經被設定)數據:

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 

(我沒有安裝MySQL,所以你的具體語法不盡相同。)

如果你的表2中的數據與表1中的數據不匹配(並且你想保留這些數據),那麼你需要一個FULL JOIN(如果MySQL不支持,UNION是一個LEFT JOIN和RIGHT JOIN)。