从多个源填充sql表

时间:2017-06-01 15:42:09

标签: sql tsql

这是我的设置:

旧表

Location [ID, Country, Region]
IpAddress [ID, IP]
Session [ID, IpAddressId, LocationId]

新表

Country[ID, Country]
Region[ID, Region]    
IpAddress[ID, IP]
Profile[ID, IpAddressId, CountryId, RegionId]
Session[ID, ProfileId]

我已经解构了位置表。现在我迷失在如何插入Profile表的杂草中,并将其与会话相关联。需要注意的是,旧的Location表仍然存在,我不打算将其删除,直到Profile表完全更新为止。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

要创建Profile表,您需要构建一个连接每个表的关系的查询,但是您不能使用id列将新表链接到旧表,因为那些不再是关系型的。这应该适合你:

--INSERT INTO Profile (IpAddressId, CountryId, RegionId)
SELECT S.IpAddressId, C.ID, R.ID
FROM   Session S --Old Session table
INNER JOIN Location L on S.LocationId = L.ID
INNER JOIN Country C on C.Country = L.Country
INNER JOIN Region R on R.Region = L.Region

注意:假设IpAddress表保持不变,并使用相同的IpAddressId

那就是说,我认为您的问题是如何将其链接到新的Session表。要回答这个问题,我们需要知道新的Session表将会做什么......但一般来说,你会以与上述查询相同的方式填充它。将其加入匹配的数据上的相应表格,以获得新的id关系。