以下是我的查询:
Select Count(*)
from Table1 s
left join Table2 d
ON s.subjectid = d.subjectid
and s.PROJECTID = d.projectid
and s.SITEName = d.SITENAME
left join Table3 dev
on s.subjectid = dev.subjectid
and s.projectid = dev.projectid
and s.siteid = dev.siteid
Where s.isprod =1
and d.isprod =1
and dev.isprod = 1
and s.projectid =107
-- Output 301 ROWS
此查询返回 301 行。但是,如果我不使用 Table3
然后连接返回 2203 行,如下面的查询所示: Select Count(*)
from Table1 s
left join Table2 d
ON s.subjectid = d.subjectid
and s.PROJECTID = d.projectid
and s.SITEName = d.SITENAME
Where s.isprod =1
and d.isprod =1
and s.projectid =107
-- OutPut 2203 ROWS
据我了解left join
,即使左表中的所有行与右表不匹配,它们也应该保留。但是在这种情况下,行数从查询 2 中的 2203 减少到查询 1 中的 301。这怎么可能?请建议这里可能出了什么问题。如需更多说明:
Table1
同 where
上述条件有 1300 行Table2
同 where
上述条件有 2203 行Table3
同 where
上述条件有 129 行最佳答案
当您的where
有条件时对来自外部联接的表的记录施加非空约束的子句,您有效地破坏了外部联接的效果,并使其充当内部联接
解决方案是将此类约束移至 on
外连接的子句:
Select Count(*)
from Table1 s
left join Table2 d
ON s.subjectid = d.subjectid
and s.PROJECTID = d.projectid
and s.SITEName = d.SITENAME
and d.isprod =1
left join Table3 dev
on s.subjectid = dev.subjectid
and s.projectid = dev.projectid
and s.siteid = dev.siteid
and dev.isprod = 1
Where s.isprod =1
and s.projectid =107
关于plsql - 左连接返回的行数少于预期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44143493/