sql语句on和where筛选顺序对结果集的影响

测试数仓数据过程中,会发现不同的sql写法,对结果集的影响不同

特别是on 和where 的区别

select * from X s2 LEFT JOIN Y s1 on s1.no = s2.no

where s1.month = ‘2025-04’

and s2.create_date BETWEEN ‘2025-04-01’ AND ‘2025-04-30’ and s2.position ='XXXX ’

这条sql我自己写的,查出来为11条数据,但业务平台计算12条数据

后来经过开发确认,这条sql写法有问题,导致数据丢失了一条

开发改成了这样

select * from X s2 LEFT JOIN Y s1 on s1.no = s2.no

and s1.month = ‘2025-04’

where

s2.create_date BETWEEN ‘2025-04-01’ AND ‘2025-04-30’ and s2.position ='XXXX ’

因此,结论就是放where后面是把两个表left join 关联出来后那条左表有数据,右表缺失的数据还存在,经过where字段将左表四月份数据再过滤,把左表非空右表为空的数据过滤掉了,导致最终结果数据会缺失一条数据。

两个表先各自过滤4月份数据,然后再进行关联,S1表有这条4月份数据,left join可以补上一条S2空数据

写sql过程中,注意on和where条件的区别,可能会影响sql查询结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值