删除重复的左外连接

Posted

技术标签:

【中文标题】删除重复的左外连接【英文标题】:Remove duplicate left outer join 【发布时间】:2021-03-20 02:41:22 【问题描述】:

我需要帮助从我的 sql 查询的以下结果中合并 2 个重复的行。

结果

查询

SELECT DISTINCT
    a.[LocationID],
    a.[BuildingCode],
    a.[LocationCode],
    a.[LocationName],
    c.UserName,
    d.RoleName  
FROM 
    [dbo].[Location] a
LEFT OUTER JOIN 
    [dbo].[UserLocation] b ON a.LocationID = b.LocationID
LEFT OUTER JOIN 
    [dbo].[User] c ON b.UserID = c.UserID AND c.RoleID = 2
LEFT OUTER JOIN 
    [dbo].[Role] d ON c.RoleID = d.RoleID

如果您可以看到有 2 行 LocationId 为 3057,其中一行为 Role Admin,另一行为 NULL。我想合并它们,并希望只显示一行与 Role Admin。

感谢您对此的关注。

【问题讨论】:

Bad habits to kick : using table aliases like (a, b, c) or (t1, t2, t3) 可能重复的问题? - ***.com/questions/30410622/… 【参考方案1】:

试试这个:

SELECT
    a.[LocationID],
    a.[BuildingCode],
    a.[LocationCode],
    a.[LocationName],
    MAX(c.UserName) UserName,
    MAX(d.RoleName ) RoleName 
FROM 
    [dbo].[Location] a
LEFT OUTER JOIN 
    [dbo].[UserLocation] b ON a.LocationID = b.LocationID
LEFT OUTER JOIN 
    [dbo].[User] c ON b.UserID = c.UserID AND c.RoleID = 2
LEFT OUTER JOIN 
    [dbo].[Role] d ON c.RoleID = d.RoleID
GROUP BY 
    a.[LocationID],
    a.[BuildingCode],
    a.[LocationCode],
    a.[LocationName]

【讨论】:

以上是关于删除重复的左外连接的主要内容,如果未能解决你的问题,请参考以下文章

Linq中的lambda /方法语法中的左外连接[重复]

真正的左外连接

linq中的左外连接

带条件sql的左外连接

LINQ:具有多个条件的左外连接

带有子查询的左外连接?