2016-07-14 46 views
1

我需要重构公司表,以便将地址信息移入专用地址表。从另一个表插入然后按ID链接表

所以我想我需要做这样的事情来创建新的地址记录。

INSERT INTO address (city, country, ...) 
SELECT city,country, ... FROM company 

但是,如何使用新创建的地址记录的ID更新公司表以保持参照完整性?

有几个重复的地址,所以我不能只是加入的城市,国家字段等

UPDATE

正如克林斯曼d提到,我得到了这一轮的方法是创建一个临时的在地址表中的company_id列:

ALTER TABLE address ADD company_id INTEGER 

INSERT INTO address (city,country,company_id) 
SELECT city,country,id from company 

UPDATE company c set c.address_id = (select a.id from address a where a.company_id = c.id) 

ALTER TABLE address DROP COLUMN company_id; 
+0

之后使用'SELECT LAST_INSERT_ID()'获取新记录的ID –

+0

将LAST_INSERT_ID()不只是给我由语句插入的最后一条记录的ID,无论已插入多少条记录? – beterthanlife

+0

是的,我误解了你的问题。 –

回答

0

你可以使用你的addresscompany_id

INSERT INTO address (company_id, city, country, ...) 
SELECT id, city, country, ... 
FROM company 

那么就没有必要对任何address_id添加到company表。

+1

我的数据库设计更适合作为关系的所有者。但是我可以做的是暂时创建company_id列,按照您的建议进行插入操作,然后在删除之前使用company_id列更新公司表。查看我的更新。 – beterthanlife

相关问题