【发布时间】: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效率更高(它没有重复消除步骤)。