我必须将数据从旧架构导入到新架构中,其中曾经是VARCHAR
的列'career_name'(在表'users'中)现在应该是INTEGER
是另一个表careers
的外键。这样我打算简化存储在VARCHAR
列中的数据,以保持数据库的完整性。
实际上,我会做以下事情:
SELECT DISTINCT 'career_name' FROM old_table
获取所有可能的值INSERT
到我的新表careers
上面获得的行INSERT
数据使用CASE子句进入我的新表users
,以便从相应的前careers
的表career_name
中获取ID,以便创建关系。 现在问题如下,表careers
很大,因此为了导入users
而为表中的每一行写一个CASE子句几乎是不可能的。
有没有办法避免这种情况?我希望我可以使用我的表careers
作为关联数组,其中键是前career_name
,值是行的ID ...谢谢!
答案 0 :(得分:2)
有没有办法避免这种情况?我希望我可以将我的表'职业'用作关联数组,其中键是前'career_name',值为行ID ...谢谢!
呃......这就是表是,不是吗?只需加入您的新职业表,即可在执行插入时将其用作查找:
INSERT INTO users (blah, whatever, career_id)
SELECT
old_users_table.blah,
old_users_table.whatever,
careers.career_id
FROM
old_users_table INNER JOIN careers ON old_users_table.career_name = careers.career_name
... users
是您的新用户表,old_users_table
是您要获取要迁移的数据的地方,careers
是您的新职业表。
答案 1 :(得分:2)
INSERT into new_Users
SELECT Users.Name, careers.id
FROM Users inner join careers ON Users.career_name = careers.career_name
因为架构不为我所知,所以我假设new_users表有2列,即name和career_id。