mysql的left join 对 not exists 有影响?

济南大飞哥 2019-03-22 05:35:43

写了一个简单的sql, sale_out 为业务表,acl_tenant为基础表,里面是机构数据。业务表有机构id,左关联机构表取名字。
现在是生产上有些测试号的数据,于是搞了一个“排除表”,v_report_ding_scm_excepted_tenant_ids , 使用 not exists去排除一些数据。
因为业务表有机构id,机构表也有,所以not exists里面的子查询,我觉得拿排除表去关联 业务表、 基础数据表都应该是一样的。结果自测了一下,使用机构表关联居然限制不了数据!而使用业务表可以。看了下sql,我猜是左连接的问题,改成内连接果然没有问题。

但问题是left join后,在where里的条件是对连接后的结果集做限制,所以应该没有问题才对。而且我试了下,把 not exists 改成not in,即便前面写的是left join ,子查询怎么写都没有问题。

我个人倾向于不使用not in ,参考这篇文章,not in子查询结果里如果有NULL,容易出现严重bug,我试了下确实是那种。而且not in还有性能问题(走不走索引)。
但是使用not exsits 居然又有上面说的问题,原因是为什么?感觉无法愉快的使用 not exists了。
...全文
388 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
济南大飞哥 2019-03-25
  • 打赏
  • 举报
回复
自己研究了下,exists是关联子查询,既然是关联查询,那么就与之前的查询连接方式有关。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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