一个很诡异的SQL嵌套查询问题,求教高手解释一下原因?

zmliu66 2014-07-03 03:47:27
问题很隐藏,无任何报错,子查询中的where条件用到了最后外面主查询表中的一个值,但这个条件居然没有效果。

为什么这个内查询中的条件(a.entity_id = t1.entity_id)会无效?

子查询单独查询,才是正确的结果,见下图:


有知道原因的给我讲解一下,非常感谢



...全文
203 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2014-07-03
  • 打赏
  • 举报
回复
那还是跨层关联表时出现问题
zmliu66 2014-07-03
  • 打赏
  • 举报
回复
引用 4 楼 wildwave 的回复:
子查询中的谓词条件关联到外层的表时,尽量不要跨多层 并且这里涉及到聚合的问题,由于外层根据entity_id分组,所以理论上写法是对的,否则还要多加一层聚合函数。大概是由于跨了两层导致解析错误,使得avg()没有效果
不是avg()没有效果,根据我的测试,嵌套查询本来是取a.entity_id = t1.entity_id得数据,但是实际运行中这个条件没有起作用的,取得是所有entity_id 的数据
小灰狼W 2014-07-03
  • 打赏
  • 举报
回复
子查询中的谓词条件关联到外层的表时,尽量不要跨多层 并且这里涉及到聚合的问题,由于外层根据entity_id分组,所以理论上写法是对的,否则还要多加一层聚合函数。大概是由于跨了两层导致解析错误,使得avg()没有效果
zmliu66 2014-07-03
  • 打赏
  • 举报
回复
引用 2 楼 wildwave 的回复:
试试把子查询中的两层写到同一层里: select avg(sum(a.veri_oil_prod_incr_mon)) from .... a where ...... group by ....
写到同一层后,结果正确,可以告诉我是什么原因导致的吗?
小灰狼W 2014-07-03
  • 打赏
  • 举报
回复
试试把子查询中的两层写到同一层里: select avg(sum(a.veri_oil_prod_incr_mon)) from .... a where ...... group by ....
小灰狼W 2014-07-03
  • 打赏
  • 举报
回复
最外层有一个group by 那么,子查询里是不是少了一层聚合呢

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧