现在我真的试着在3小时后在谷歌找到任何东西。 我想要互相加入两个SQL表。
Table_LN
是一个用户表,它计算唯一的电子邮件属性
Table_AD
是一个包含Active Directory电子邮件属性和用户主要名称的表(我的问题,电子邮件地址不等于UPN,也不是唯一的)
我的目标是使用Table_LN
的UPN扩展Table_AD
中的行。如果Table_AD
中的多行有一个具有相同电子邮件地址的行,则应该使用它将找到的第一行。我还需要一个国家的过滤器。
我尝试的是以下代码:
SELECT
[FirstName],
[LastName],
[EMailAddress],
[UPN],
[OfficeCountry]
FROM [Table_LN]
RIGHT JOIN [Table_AD] ON [Table_LN].[EMailAddress] = [Table_AD].[EMail]
WHERE
OfficeCountry = 'Malaysia'
我现在的问题是,对于每个额外的电子邮件地址,此规则会为我创建更多行。这意味着它会将我的用户多播到目录中。
有人可以帮助我,或者有人知道有人要求的话题吗?
谢谢
答案 0 :(得分:2)
您需要获得一个较小的表才能加入。我喜欢使用CTE。子查询,临时表等也可以正常工作。
;WITH cte AS (
SELECT [UPN],
[Email],
[RNum] = ROW_NUMBER() OVER(PARTITION BY [Email] ORDER BY [<PK Field>])
FROM [Table_AD]
)
SELECT
[FirstName],
[LastName],
[EMailAddress],
[UPN],
[OfficeCountry]
FROM [Table_LN]
LEFT JOIN [cte]
ON [cte].[EMail] = [Table_LN].[EMailAddress]
AND [cte].[RNum] = 1
WHERE
OfficeCountry = 'Malaysia'
在ROW_NUMBER函数中使用ORDER BY来改变第一行。您的表的主键可能会为您提供表中的第一个条目。