SQL中join加where时的一个小坑

今天工作的时候碰见了一个非常神奇的问题,简单来说我写的SQL是这样的

    select 
        f.id, p.id
    from 
        table1 as f
    full join
        table2 as p
    on 
        f.id = p.id
    where 
        f.date >= '{}' and p.date >= '{}'
    group by 1, 2

其中我用到了full join就是想要看下两张表中有多少没有join上的。
但是得到的结果中发现只有两个表完全join上的结果,没有join结果为null的结果。
于是我就写了下面这个SQL:

    select 
        f.id, p.id
    from 
    (
        select 
        	id
        from
        	table1
        where
        	date >= '{}'
        group by
        	1
    ) as f
    full join
    (
    	select
    		id
    	from
        	table2
        where
        	date >= '{}'
        group by
        	1
   ) as p
    on 
        f.id = p.id

这样的话就没有问题了
问了组里的另一个dev,才意识到上面那个join的问题所在。
因为上面的写法中,是先join在做where比较的,所以当时full join完应该是没有问题的,但是等到后面where的时候,因为join出来为null的结果,其where过滤条件肯定为false的,所以最后经过where过滤之后不存在为null的结果了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值