MySQL Left Join不为连接表返回空值

gre*_*g84 22 mysql null join

请帮我处理以下MySQL查询,它连接两个表(A和B):

SELECT * from A
left join B on A.sid = B.sid
where (rCode = 1 Or rCode = 2 Or rCode = 3 Or rCode = 5)
AND (rYear = 2011 or rYear is null)
Run Code Online (Sandbox Code Playgroud)

roleCode是表A rYear中的字段,是表B中的字段

结果集不符合预期.仅返回185行,但表A中有629行与where条件匹配.不应该在表B中没有匹配行的行返回其B字段的空值吗?

Jag*_*age 54

您不应在WHERE子句中指定rYear.这些限制了您在加入后的结果.您应该在ON子句中指定rYear以从表B中获取带有NULL的记录.

SELECT * from A
left join B 
on A.sid = B.sid 
AND (rYear = 2011 or rYear is null)
where (rCode = 1 Or rCode = 2 Or rCode = 3 Or rCode = 5)
Run Code Online (Sandbox Code Playgroud)

  • 您不需要 JOIN 条件中的 *rYear IS NULL*。使用`ON a.sid = b.sid AND rYear = 2011`就足够了 (3认同)
  • 嗨,杰格。这很好用!但是,我是否误解了 MySQL 文档?SQL Server 将为原始查询返回大量空值。http://dev.mysql.com/doc/refman/5.0/en/left-join-optimization.html - 特别是:“如果 A 中有一行与 WHERE 子句匹配,但 B 中没有行匹配 ON 条件,生成一个额外的 B 行,所有列都设置为 NULL。” (2认同)