Sql server 连接两个SQL表,但不相乘行

Sql server 连接两个SQL表,但不相乘行,sql-server,select,join,Sql Server,Select,Join,现在我真的试着从3小时后在谷歌上找到任何东西。 我有两个SQL表,我想彼此连接 Table_LN是一个用户表,它统计唯一的电子邮件属性 Table_AD是一个具有Active Directory电子邮件属性和用户原则名称My problem的表,电子邮件地址不等于UPN,也不唯一 我的目标是使用表_AD中的UPN扩展表_LN中的行。如果表_AD中有多行具有相同的电子邮件地址,则应使用找到的第一行。我还需要一个国家的过滤器 我尝试的是以下代码: SELECT [FirstName],

现在我真的试着从3小时后在谷歌上找到任何东西。 我有两个SQL表,我想彼此连接

Table_LN是一个用户表,它统计唯一的电子邮件属性

Table_AD是一个具有Active Directory电子邮件属性和用户原则名称My problem的表,电子邮件地址不等于UPN,也不唯一

我的目标是使用表_AD中的UPN扩展表_LN中的行。如果表_AD中有多行具有相同的电子邮件地址,则应使用找到的第一行。我还需要一个国家的过滤器

我尝试的是以下代码:

SELECT 
    [FirstName], 
    [LastName], 
    [EMailAddress],
    [UPN],
    [OfficeCountry]
FROM [Table_LN]
RIGHT JOIN [Table_AD] ON  [Table_LN].[EMailAddress] = [Table_AD].[EMail]
WHERE 
    OfficeCountry = 'Malaysia'
我现在的问题是,这个语句会为每个额外的电子邮件地址创建更多的行。这意味着它会在目录中复制我的用户

yomebody能帮我吗?或者有人知道有人问这个话题吗


谢谢

您需要一个较小的表才能加入。我喜欢用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以更改第一行。表的主键可能会为您提供表中的第一个条目

在联接之前删除?使用哪个候选键选择外部表中的行?在里面的桌子里?除非执行1对0或1匹配,否则您将始终增加行集大小。您希望得到什么结果?只返回一封特定的电子邮件,将它们连接成一列?这很好!这正是我想要的!非常感谢你!现在我可以回家了;