我有兩個不同結構的數據庫。MySQL合併不同結構的表
表1:
ch_code ch_def ch_weight
表2:
address ch_code
我需要合併這兩個表,所以結構看起來像:
ch_code ch_def ch_weight address
數量或行在兩個表中是不同的(表1有更多的數據)。
我應該使用merge
,union
..別的嗎?
謝謝!
我有兩個不同結構的數據庫。MySQL合併不同結構的表
表1:
ch_code ch_def ch_weight
表2:
address ch_code
我需要合併這兩個表,所以結構看起來像:
ch_code ch_def ch_weight address
數量或行在兩個表中是不同的(表1有更多的數據)。
我應該使用merge
,union
..別的嗎?
謝謝!
這裏的應處置三種可能的情況的解決方案:
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如果你有一個新表對住房的合併數據。
PS - 任何人都知道獲取包含下劃線看起來正確的多行代碼塊的祕密嗎?我不得不在每條線上安排反攻。 – BryanD 2009-11-25 20:17:36
如果表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)。
那麼,這取決於你想要什麼在結果表... 這可能會幫助,如果你添加一些示例數據。 – 2009-11-25 19:58:39
只是爲了澄清,你的意思是你在同一個數據庫中有兩個表,並且正在尋找一個將導致你所指示的列的查詢? – tloach 2009-11-25 19:59:16
是否有與表關聯的列?例如,表示兩個表中相同行的person_id。 – wallyk 2009-11-25 20:02:05