我有一张旧表,其中包含以下设置
电子邮件
[IdEmail]
[EmailAddress的]
[市]
最多有5个不同City's
,EmailAddress
存在一些重复数据。
我的新设置有这两个表(我为了示例目的简化了这些表)。
EmailAddressListTable
[IdEmailAddress]
[EmailAddress的]
EmailSubscriptions
[IdEmailSubscriptions]
[EmailAddressID](FK)
[MailingListID] (城市)
如何在不复制重复的电子邮件地址的情况下插入新数据?或者通过简单的插入更容易插入所有记录,然后删除重复项并更改链接表中的相应ID?关于我如何做到这一点,我有点困惑。
更新
只是为了澄清,例如说旧表有记录:
ID Email City
1 email@domain.com 1
2 email@domain.com 4
3 email@domain.com 5
4 NEWemail@Newdomain.com 1
我想把它转移到像这样的新表中
EmailAddressListTable
Id Email
1 email@domain.com
2 NEWemail@NEWdomain.com
EmailSubscriptions
ID EmailID MailingListID
1 1 1
2 1 4
3 1 5
4 2 1
答案 0 :(得分:1)
假设电子邮件地址是匹配项的唯一标识符,并且“电子邮件”表中可以忽略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