我们有三个表,代理商,地区和国家,我们希望将它们合并到一个新的国家/地区表中。
旧架构是
oldSchema.Agencies
AgentId PK,int
TaxName varchar(3)
TaxRate decimal(18,3)
oldSchema.Regions
RegionCode PK,tinyint
AgentId int
oldSchema.Countries
CountryCode PK,varchar(2)
CountryName varchar(50)
RegionCode tinyint
我们的组织不再是用户代理商和地区,因此我们希望将代理商数据合并到newSchema.Countries表中。
新架构是
newSchema.Countries
CountryCode PK,varchar(2)
CountryName varchar(50)
TaxName varchar(3)
TaxRate decimal(18,3)
以下更新查询不正确,因为它会在每行中插入相同的数据
INSERT INTO newSchema.Countries (
CountryCode
,CountryName
,TaxName
,TaxRate
)
SELECT OldSchema.Countries.CountryCode
,OldSchema.Countries.CountryName
,OldSchema.Agencies.TaxName
,OldSchema.Agencies.TaxRate
FROM OldSchema.Agencies
INNER JOIN (
OldSchema.Regions INNER JOIN OldSchema.Countries ON OldSchema.Regions.RegionCode = OldSchema.Countries.RegionCode
) ON OldSchema.Agencies.AgentId = OldSchema.Regions.AgentId
WHERE NewSchema.Countries.CountryCode = OldSchema.Countries.CountryCode
我们如何将每个代理商的TaxName和TaxRate插入到新的“国家/地区”表格中,以便每个国家/地区获得从代理商表格中应用的正确税金?
答案 0 :(得分:1)
我不确定您遇到的问题,但我认为您有多个regions
具有相同的AgentId
,导致特定国家/地区的重复数据。
如果这是您的问题,请尝试以下查询,否则请提供更多详细信息以帮助您。
INSERT INTO newSchema.Countries
(CountryCode,CountryName,TaxName,TaxRate)
select distinct
c.CountryCode,
c.CountryName,
a.TaxName,
a.TaxRate
from oldSchema.Agencies a
inner join oldSchema.Regions r on a.AgentId = r.AgentId
inner join oldSchema.Countries c on r.RegionCode = c.RegionCode
另请查看此fiddle,其中包含我为了演示目的而创建的示例数据。