我有以下使用两个表的查询。一个是联系人,另一个是电子邮件。联系人具有以下列:ContactId,FirstName,LastName。电子邮件包含以下列:EmailId,ContactId,EmailAddress。
我有这个运行基本重复检查的查询。它将返回一个数值和一个电子邮件(即2 - abc@yahoo.com = 2个联系人的电子邮件地址为abc@yahoo.com)。我试图让它显示与电子邮件关联的名字和姓氏,但是当我这样做时,它会改变正在生成的数据量。这很可能是因为它正在抓取附有名字和姓氏的电子邮件。
这是查询;当我尝试输入SELECT CONTACT.LASTNAME和CONTACT时。 FIRSTNAME以及GROUP BY,它将改变输出的数据量;创建了更多列(预期),但是还有更多行,数据实际上不太相关(返回的空值更多)。造成这种情况的原因是什么,我该如何解决?
SELECT COUNT(CONTACT.CONTACTID) AS [DUPLICATECOUNT], EMAIL.ADDRESS AS [EMAILADDRESS]
FROM CONTACT
INNER JOIN EMAIL on EMAIL.ContactID = CONTACT.ContactId
GROUP BY EMAIL.ADDRESS
HAVING COUNT (CONTACT.ContactID) > 1
ORDER BY [DUPLICATECOUNT] DESC
答案 0 :(得分:0)
如果您的MS SQL Server是2008或更新版本,那么您可以使用窗口功能查找重复项。示例查询如下所示。
select c.firstname, c.lastname, e.emailaddress,
count(c.contactid) over(partition by e.emailaddress order by e.emailaddress) cnt
from contact c
inner join email e on c.contactid = e.contactid
order by cnt desc
答案 1 :(得分:0)
好的,您正试图让它显示与电子邮件关联的名字和姓氏:
select FirstName, LastName
FROM CONTACT C WITH (NOLOCK), EMAIL E WITH (NOLOCK)
where C.ContactID = E.ContactId
AND EmailAddress='emailaddress@yahoo.com'