我正在将一个表与其自身进行比较,试图确定一条记录中的电子邮件是否正在另一条记录中的其他四个列中的任何一个中使用。
为了使这更容易,让我们看一个示例(简化):
Name: Bob
Office Email: bob@aaa.com
Home Email: bob@home.com
Mobile Email: bobster@gmail.com
.
Name: Rob
Office Email: rob@bbb.com
Home Email: bob@home.com
Mobile Email: robert@gmail.com
现在我有一个这样的sql语句:
select c1.ContactId id1, c1.FullName Name1, 'Office Email 1' EmailType1, c1.EMailAddress1 Email,
c2.ContactId id2, c2.FullName Name2,
CASE c1.EmailAddress1
WHEN c2.EMailAddress1 THEN 'Office Email 1'
WHEN c2.Si_OfficeEmail2nd THEN 'Office Email 2'
WHEN c2.EMailAddress2 THEN 'Mobile Email'
WHEN c2.pc_hmemail THEN 'Home Email'
ELSE '?'
END EmailType2,
CASE c1.EmailAddress1
WHEN c2.EMailAddress1 THEN c2.EMailAddress1
WHEN c2.Si_OfficeEmail2nd THEN c2.Si_OfficeEmail2nd
WHEN c2.EMailAddress2 THEN c2.EMailAddress2
WHEN c2.pc_hmemail THEN c2.pc_hmemail
ELSE '?'
END DuplicateEmail
from Contact c1, Contact c2
where (
LTRIM(RTRIM(c1.EMailAddress1 )) = LTRIM(RTRIM(c2.EMailAddress1))
Or LTRIM(RTRIM(c1.EMailAddress1 )) = LTRIM(RTRIM(c2.EMailAddress2))
Or LTRIM(RTRIM(c1.EMailAddress1 )) = LTRIM(RTRIM(c2.pc_hmemail))
Or LTRIM(RTRIM(c1.EMailAddress1 )) = LTRIM(RTRIM(c2.Si_OfficeEmail2nd))
)
And c1.ContactId <> c2.ContactId
And c1.StateCode = 0
and c2.StateCode = 0
order by c1.FullName, c2.FullName
不幸的是,由于 Bob 和 Rob 具有相同的电子邮件“类型”(家庭电子邮件),但由于拼写错误而重复,我的查询返回两条记录,一条显示 Bobs 的电子邮件在 Rob 电子邮件中重复,另一条显示 Rob 的电子邮件是在 Bobs 电子邮件中重复。
我只需要一张唱片。我确信这是一个常见问题,但我不太清楚如何描述这个问题,以便让搜索引擎返回一些有用的东西。
也许有更好的方法来解决这个问题?如果没有,除了跳过一堆中间临时表来消除这些等效记录之外,有没有办法为此编写单个查询?