一:错误sql。
需求:求出在xxx中存在,但是在vvv中不存在的数据。
前提:xxx是不分区,vvv是分区。
select
*
from XXX as a
left join vvv as b
on a.row_id=b.row_id
where b.row_id is null and b.p_dt='2022-03-14'
结果如下:
二:正确sql。
select
*
from AAA as a
left join
(
select *
from vvv as a
where a.p_dt='2022-03-14') as b
on a.row_id=b.row_id
where b.row_id is null
结果
三:原因。
我们在使用多表关联的时候,对某一张表进行限制,应该将限制放在表内,如果放在表外进行限制,在执行完left join的时候,进行过滤,会将b表中a.p_dt=‘2022-03-14’ 留下来,将空值全部过滤掉,变成了inner join。