Sql server 2012 SQL中的内部联接返回重复的行

Sql server 2012 SQL中的内部联接返回重复的行,sql-server-2012,inner-join,duplicate-removal,Sql Server 2012,Inner Join,Duplicate Removal,我有以下三个表格: Person TeamMember Provider PersonId PersonName PersonId ProviderId IsLead ProviderId ProviderName --------- ---------- -------- ------------ -------- ------------ -

我有以下三个表格:

       Person                        TeamMember                     Provider

 PersonId   PersonName   PersonId   ProviderId    IsLead     ProviderId   ProviderName
---------   ----------   --------  ------------  --------   ------------  --------
  P1         ABC            P1         PR1          Yes          PR1       Provider1
  P2         PQR            P1         PR2          No           PR2       Provider2
                            P1         PR3          No           PR3       Provider3
                          -------------------------------
                            P2         PR1          No
                            P2         PR2          No
                            P2         PR3          No
我需要输出为(匹配PersonId和IsLead='Yes'):

我在上面3个表上使用了下面的内部联接,但结果中有重复的行

  SELECT        P.PersonID, P.PersonName, 
         CASE WHEN TM.IsLead = 'Yes' THEN Pr.ProviderName
              WHEN TM.IsLead = 'No'  THEN NULL END AS ProviderName

  FROM            Person P INNER JOIN TeamMember TM ON P.PersonID = TM.PersonID 
                           INNER JOIN Provider PR ON Pr.ProviderId = TM.ProviderId
我试着使用DISTINCE,但即使这样也没用


任何帮助都将不胜感激

要使解决方案正常工作,需要使用
左JOIN
并将大小写表达式移动到JOIN子句中。我相信以下查询将满足您的需要。

您可以在上查看一个示例


你在做一个“树”连接。一个根表使用不同的条件连接到两个单独的根表。你得到了预期的行为。如果联接表A有4条匹配的记录,联接表B有8条,那么将得到8行记录,其中4行的A记录为空。e、 你总是能得到尽可能多的记录来处理max(matched)表中的所有匹配记录。它成功了!谢谢
  SELECT        P.PersonID, P.PersonName, 
         CASE WHEN TM.IsLead = 'Yes' THEN Pr.ProviderName
              WHEN TM.IsLead = 'No'  THEN NULL END AS ProviderName

  FROM            Person P INNER JOIN TeamMember TM ON P.PersonID = TM.PersonID 
                           INNER JOIN Provider PR ON Pr.ProviderId = TM.ProviderId
SELECT
 P.PersonID
 ,P.PersonName
 ,Pr.ProviderName
FROM Person P
 LEFT JOIN TeamMember TM ON TM.PersonID = P.PersonID
                         AND TM.IsLead = 'Yes'
 LEFT JOIN Provider PR ON Pr.ProviderId = TM.ProviderId