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

标签 sql-server-2012 inner-join duplicate-removal

我有以下 3 个表:

       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'):
PersonId  PersonName ProviderName
--------- ---------- ------------
  P1       ABC         Provider1
  P2       PQR         NULL

我在上面的 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

我尝试使用 distinct ,但即便如此也无济于事。

任何帮助将非常感激!

最佳答案

为了使您的解决方案正常工作,您需要使用 LEFT JOIN并将 CASE 表达式移动到 JOIN 子句。我相信以下查询将满足您的需求。
您可以在 SQLFIDDLE 上查看示例.

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

关于sql-server-2012 - SQL 中的内部联接返回重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23878117/

相关文章:

mysql - 试图找到船上最年轻线官的年龄MYSQL

c# - 使用 LEFT 字符串函数的 SQLKata 内连接

php - 如何避免/停止重复插入 php 和 html?

php - MySQL:在不破坏外键约束的情况下消除重复行

SQL查找特定时间段内的连续事务

sql-server - 删除 SQL 集群节点

full-text-search - 如何检查全文索引表是否启用了停用词?

sql - 如何在我的第一次选择中使用第二次选择的结果

文本列上的 SQL INNER JOIN

url-rewriting - Robots Meta Tag Noindex 是否删除索引 URL