gpt4 book ai didi

plsql - 左连接返回的行数少于预期?

转载 作者:行者123 更新时间:2023-12-04 12:08:25 25 4
gpt4 key购买 nike

以下是我的查询:

  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。这怎么可能?
请建议这里可能出了什么问题。如需更多说明:
  • Table1where上述条件有 1300 行
  • Table2where上述条件有 2203 行
  • Table3where上述条件有 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com