join查询的结果和in查询结果不一致

SELECT count(*) FROM c_fact cf LEFT JOIN c_processing_detail cpd on cf.id = cpd.fact_id 
WHERE cpd.domain_id ='TB'
AND cf.domain_id ='TB' 
AND cf.is_latest  
AND cpd.id IS NULL ;

SELECT count(*) FROM c_fact WHERE is_latest AND domain_id ='TB'
AND id NOT IN (SELECT fact_id FROM c_processing_detail cpd WHERE domain_id='TB'); 

咋一看感觉两个sql都一样,都是查询没有processingDetail的fact数据。

但是第一个left join是有问题的,如果从表的的id都为null了,从表其他列还能有数据?

错在cpd的domainId这里。

left join的确是查询出左表全表数据,但是右表如果join失败,拼接的右表数据全部都是null,null是无法匹配=的。

所以在where  cpd.domain_id的时候就有问题了。

posted on 2022-12-02 18:27  我欲皆真  阅读(167)  评论(0编辑  收藏  举报

导航