首页 >数据库 >mysql教程 >为什么 SQL 中的 LEFT JOIN 返回意外结果?

为什么 SQL 中的 LEFT JOIN 返回意外结果?

Patricia Arquette
Patricia Arquette原创
2024-12-31 14:52:14889浏览

Why is My LEFT JOIN in SQL Returning Unexpected Results?

了解 LEFT JOIN:为什么您的 SQL 查询没有返回预期结果

在 SQL 中使用 LEFT JOIN 时,认识到其独特特征和潜在陷阱至关重要。这个问题说明了一个示例,其中 LEFT JOIN 查询返回意外结果,促使我们深入研究底层机制并解决问题。

LEFT JOIN 操作从左表中检索所有行(在本例中, #appSteps),无论它是否与右表(#appProgress)匹配。右表中任何不匹配的行都被分配 NULL 值。但是,当您在 WHERE 子句 (p.appId = 101) 中包含正确的表时,您实际上将查询转换为 INNER JOIN。

解决方案:

要纠正该问题,需要将过滤右表(p.appId = 101)的谓词从 WHERE 子句移至 ON LEFT JOIN 语句的条件。这会强制连接在执行连接之前过滤正确的表,确保仅包含匹配的行。

调整后的 SQL 语句如下:

Select  P.appId, S.stepId, S.section, P.start
From    #appSteps    S   With (NoLock)
Left Join #appProgress P   On  S.stepId = P.stepId 
                           And P.appId = 101
Where   S.section Is Not Null

通过将查询调整为正确利用 LEFT JOIN 功能,它将产生预期的结果,包括 #appSteps 中的所有非空行和 #appProgress 中的匹配行,而不会因额外的原因而无意中排除行WHERE 子句中的谓词。

以上是为什么 SQL 中的 LEFT JOIN 返回意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn