2010-11-04 17 views
0

我想從這些數據舊錶移動保存新的ID爲舊錶

restaurant_id | restaurant_nm | more data 

bar_id | bar_nm | more data 

venue_id | venue_nm 

我會添加字段venue_id舊錶
後來我想運行類似於這樣的查詢:

INSERT INTO `venue` (SELECT null, `restaurant_nm` FROM `restaurant`) 

但是,雖然做的副本,我想新的ID存儲到噸他老桌子。這是純粹的MySQL可能嗎?

編輯老餐館是鏈(多雜亂喬的),確定其中100%是id

+0

新ID如何計算? – 2010-11-04 03:24:08

+0

新ID是一個自動增量 – Moak 2010-11-04 03:34:24

+0

重要的是要問餐廳和酒吧ID是否有共同的價值 – LesterDove 2010-11-04 03:34:35

回答

1

你可以暫時存儲在新表中的舊ID(在一個額外的列的唯一的事情),然後在舊錶上執行UPDATE。這是兩行'純SQL'。

restaurant_id |restaurant_name | v_id 

venue_id | venue_name | rest_id 

INSERT INTO `venue` (SELECT null, `restaurant_nm`, `restaurant_id` FROM `restaurant`) 

然後

UPDATE restaurant r 
INNER JOIN venue v 
ON r.restaurant_id = v.rest_id 
SET r.v_id = v.venue_id 

有興趣看看有什麼更好的解決方法可能是。

+0

我在這裏假設餐廳和場地ID以及酒吧和場地ID可能並不相同。 – LesterDove 2010-11-04 03:37:10

+0

謝謝,這是最後的解決方案,因爲我將不得不與酒吧,學校,醫院,麪包店,派出所,自動櫃員機以及另外15張桌子 – Moak 2010-11-04 03:40:20

+0

這樣做啊。你可以概括一下這種方法,可以通過將ID存儲在中間表[old_id,venue_id]中。然後將其添加到聯接中。並在每個表更新後從其中刪除。所以你不必在整個地方添加新的列。 – LesterDove 2010-11-04 03:45:23