【问题标题】:Left Outer Join That Returns Null Right Side In Addition To The Matching Rows除了匹配行之外,还返回空右侧的左外连接
【发布时间】:2014-01-11 21:50:43
【问题描述】:

我正在尝试进行一个查询,该查询将返回两个表的左外连接,但每次匹配都会有一个额外的行。右侧的额外行为空。这是一个例子:

这是我当前使用 linq 的查询(SQL 中的响应也值得赞赏):

context.Code
       .GroupJoin(
           context.SubCode,
           code => code.CodeID,
           sub => sub.CodeID,
           (code, sub) => new
           {
               Codes = code,
               SubCodes = sub
           })
       .SelectMany(sub => sub.SubCodes.DefaultIfEmpty(),
           (code, sub) => new { Codes = code.Codes, SubCodes = sub })
       .ToList();

编辑(解决方案?):

SELECT Codes.ID, Codes.Code, SubCodes.SubCode
FROM Codes
INNER JOIN SubCodes
ON Codes.ID = SubCodes.CodeID
UNION
SELECT Codes.ID, Codes.Code, NULL
FROM Codes
ORDER BY Codes.ID

【问题讨论】:

  • 你可以做一个内部连接加上一个联合,你只需在右侧插入 null。
  • 你应该使用union all而不是union,因为union all效率更高(它没有重复消除步骤)。

标签: c# mysql sql linq lambda


【解决方案1】:

这是执行您想要的操作的 SQL:

(select c.id, c.code, sc.subCode
 from codes c join
      subcodes sc
      on c.id = sc.codeid
) union all
(select c.id, c.code, NULL
 from codes c
)

【讨论】:

  • 非常感谢!我刚得到它我相信。更新了原帖。
猜你喜欢
  • 1970-01-01
  • 2012-03-20
  • 2018-11-26
  • 1970-01-01
  • 2023-03-07
  • 2013-07-28
  • 1970-01-01
  • 2014-02-24
  • 2023-03-09
相关资源
最近更新 更多