前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >left join 会出现多出的行吗?

left join 会出现多出的行吗?

作者头像
披头
发布2022-08-22 10:40:08
1.1K0
发布2022-08-22 10:40:08
举报
文章被收录于专栏:datartisandatartisan

昨天微信群里抛出一个SQL问题,瞬间你一嘴我一嘴,好不热闹。

起初我也是这么认为的,你是怎么认为的呢?

然后,小姐姐又补充了上下文

按照文氏图的思路,似乎 left join 后不会增加

但是小姐姐解释说,查询结果确实“诡异”的多出了184行,问题变的 interesting

大家都给出了自己的见解,有人开始追问小姐姐用的是什么数据库,小姐姐说是impala

大部分人认为B表的关联列有重复值,而小姐姐坚定的说没有重复值,但是包含NULL

正当大家激烈的讨论时,小姐姐说问题搞清楚了。

有人说这是impala方言,真的是方言吗?我也不清楚,之前没关注过这种场景,因为一般关联列都是主键,而业务主表的主键一般不包含NULL

为了搞清楚这个问题,我就在 MySQL8 环境下测试了一下。

假设成绩表数据是这样的:(2名学生的姓名缺失)

学生信息表数据是这样的:(3名学生的姓名缺失)

现在要获取每个学生所在的城市信息:

结果居然真的比成绩表(左表)的行数多,为什么呢?因为左表关联列为NULL的行会与右表关联列为NULL 的行去关联,条件就是 NULL = NULL ,所以由 NULL 产生的行数是左表 NULL 的行数 m 乘以 右表 NULL 的行数 n,总行数 = 左表的非空行数 + m * n

我认为这并不是 impala 的方言,你认为呢?欢迎留言讨论

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学探究 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档