从具有重复数据的 table 插入到新的规范化 tables

Insert from one table with dupilcate data to new normalised tables

我有一个旧的 table 具有以下设置

电子邮件
[身份证邮箱]
[电子邮件地址]
[城市]

最多有 5 个不同的 City's 并且 EmailAddress 有一些重复的数据。

我的新设置有这两个 table(为了示例目的我已经简化了)。

EmailAddressListTable
[IdEmailAddress]
[电子邮件地址]

电子邮件订阅
[IdEmail订阅]
[电子邮件地址 ID] (FK)
[MailingListID] (城市)

如何在不复制重复电子邮件地址的情况下插入新数据?还是通过简单的插入插入所有记录,然后删除重复项并更改link table中的相应ID更容易?不过,我对如何执行此操作有点困惑。

更新

只是为了澄清,例如说旧的 table 有记录:

ID  Email                   City
1   email@domain.com        1
2   email@domain.com        4
3   email@domain.com        5
4   NEWemail@Newdomain.com  1

我想像这样将其转移到新的 table 中

EmailAddressListTable

Id  Email
1   email@domain.com
2   NEWemail@NEWdomain.com

电子邮件订阅

ID  EmailID  MailingListID
1   1        1
2   1        4
3   1        5
4   2        1

假设电子邮件地址是匹配项的唯一标识符,并且可以在 "Emails" table 中忽略 IdEmail 列。

你可以这样做:

DECLARE @EmailAddressListTable TABLE 
(
    IdEmailAddress int identity(1,1) not null,
    EmailAddress nvarchar(50) not null
)

INSERT INTO @EmailAddressListTable
SELECT DISTINCT 
    EmailAddress
FROM Emails

SELECT * FROM @EmailAddressListTable -- show emails in new table

DECLARE @EmailSubscriptions TABLE
(
    IdEmailSubscriptions int identity(1,1) not null,
    EmailAddressID int not null,
    MailingListID int not null
)

INSERT INTO @EmailSubscriptions
SELECT 
    newEmails.IdEmailAddress, oldEmails.City 
FROM 
    @EmailAddressListTable newEmails
INNER JOIN
    Emails oldEmails on newEmails.EmailAddress = oldEmails.EmailAddress

SELECT * FROM @EmailSubscriptions -- show matches to email in subscriptions