暂无图片
left join 返回结果集问题
我来答
分享
chencheng
2022-09-27
left join 返回结果集问题

这边有条SQL对一个对两个视图做了left join连接查询,在where后加了一个多字段 in 的过滤条件后,返回的结果反而比不加条件还多,我这边有点不太明白,按理 where因该只是对符合关键字on后面条件的临时表做过来,为什么加一个where条件后反而会多出很多重复的数据呢?

我来答
添加附件
收藏
分享
问题补充
6条回答
默认
最新
chencheng

问题已解决,反馈为dblink + union all 导致的wrong result

暂无图片 评论
暂无图片 有用 0
暂无图片
布衣
暂无图片

方便把SQL贴出来吗?图片着实有点不方便看

暂无图片 评论
暂无图片 有用 0
有问题吗?

我盲猜: 因为你的连接方式是left join, left join 就会把驱动表中没有在被驱动表中匹配到的数据也会返回到结果集中。 最简单的方式就是把count(*) 换成*, 比对一下数据。

暂无图片 评论
暂无图片 有用 0
Thomas

这种情况应该不可能。看下两次查询的时间间隔。没准两次查询所对应的数据都已经变化了。

暂无图片 评论
暂无图片 有用 0
zhangyfr
2022-09-28
赞同
chencheng

各位老师不好意思,这边还有个关键点,中间用到的视图是使用了dblink对多个库的同名表进行union all后得到的,将视图中的数据转换为本地表后再查询,返回的结果行数就是正确的,中间远端库的表数据没有变化,我这边怀疑是触发了wrong result的BUG,但是客户环境是19.12,我在mos上没有找到对应版本的wrong result 的bug文档,这点比较奇怪

暂无图片 评论
暂无图片 有用 0
L
longqing

alter system flush buffer_cache 清理完缓存试试

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏