2013-04-22 30 views
0

我需要規範化我的表。所以我做了一個我執行的腳本(sql)。 我想將表A(舊)中的所有現有客戶插入表B(新)。MySQL表通過普通的sql錯誤規範化

很簡單,就是用

INSERT INTO `A` SELECT * FROM `B`; 

做,但我想設置一些外鍵值。表A中有city字段,但表B中有city_id字段。我認爲是這樣的:

INSERT INTO `A` (`id`, `name`, `city_id`) 
SELECT `id`, `name` FROM `B`, 
(SELECT `cities`.`id` FROM `cities` WHERE `cities`.`name` = (SELECT `city` FROM `A` WHERE `A`.`id` = `B`.`id`)) `temp_cities`; 

不幸的是,這並不工作,因爲Bid未設置:-(錯誤如下:?

Error (1054): Unknown column 'B.id' in 'where clause') 

在這一點,我才擺烏龍

+0

請顯示錶格的模式。 – Barmar 2013-04-22 23:01:52

+0

簡化(因爲其他的東西並不重要): A {id,name,city} B {id,name,city_id} cities {id,name} – 2013-04-22 23:14:19

回答

0

只是使用語法SELECT ID AS 'city_id' FROM B,你可以「名稱」中的每一列的選擇,然後你可以將它沒有任何問題

您可以禁用的外鍵約束這樣的:

SET foreign_key_checks = 0; 

後您切換回

SET foreign_key_checks = 1; 

完成查詢。這不是最佳做法,但有時可以提供幫助。

+0

我不知道,如果你明白我的意思問題是:我需要用當前的INSERT行的id替換'B'.'id'(在第二個派生的SELECT查詢中)。 – 2013-04-22 23:17:26