将字段映射到MS Access中自己的行

时间:2012-05-22 20:49:06

标签: sql ms-access

我的任务是将数据从MSSQL服务器迁移到MySQL服务器。我认为首先将MSSQL数据库转换为MS Access数据库会更容易,所以我可以把它弄糟,然后将其导出为MySQL。

所以,我有一张桌子,叫做公司:

companyID |    name        |     c_phon  |  c_email                   | c_address
    1       StackOverflow     5555555555     Joel@stackoverflow.com      NYC
    2       Google            5558675309     Google@google.com           NYC

在我们的新数据库中,我们更改了这些字段的保存方式。我们使用的是prefs表,而不是每行都有电话号码,电子邮件和地址。

首选项:

prefID  |  prefName
  1         c_phone
  2         c_email
  3         c_address

我的问题是,如何将每个字段转换为我们companyPrefs表中的自己的行。看起来应该是这样的:

companyID | prefID | prefValue
    1         1      5555555555
    1         2      Joel@stackoverflow.com
    1         3      NYC
    2         1      5558675309
    2         2      Google@google.com
    2         3      NYC

我不知道如何使用vbscript或其他什么,所以我试图使用SQL来做到这一点。

INSERT INTO comanyPrefs (companyID, prefID, prefValue)
SELECT companyID, prefID, @fieldName
FROM companies, preferences
WHERE @fieldName = prefName

显然这不起作用。如何使用变量字段名称选择字段?如何为每个字段插入一行?

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。但是,您需要为每个可能的字段插入,如下所示:

INSERT INTO companyPrefs (companyID, prefID, prefValue)
SELECT companyID, (select prefID from prefs where prefName = 'c_phone'), c_phone
FROM companies where c_phone is not null
UNION
SELECT companyID, (select prefID from prefs where prefName = 'c_email'), c_email
FROM companies where c_email is not null
UNION
SELECT companyID, (select prefID from prefs where prefName = 'c_address'), c_address
FROM companies where c_address is not null

演示:http://www.sqlfiddle.com/#!3/5cf87/1