从具有重复数据的 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
我有一个旧的 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