问题:left join在以下两种情况下,为什么查询结果不同,左侧表什么时候需要加约束条件呢,这两种情况是不是用inner join更好呢?谢谢!
情况一: 为什么没有对a表做条件约束,就能实现筛选目标?
-- gct(table_id) 👉 data_resource_table(res_id,table_id) 👉 data_resource(res_id,cata_id)
-- 想查询gct表中table_id 对应的cata_id值 (134条)
select a.cata_id , a.res_name , b.table_name
from data_resource a left join data_resource_table b on a.res_id = b.res_id
where b.table_id in (select table_id from gct)
ORDER BY cata_id;
-- 这个语句使用left join 和 inner join 查询结果一致 都是恰好134条
情况二: 如果不对a表做约束,会显示一千多条数据,必须交换AB表位置,或者使用inner join,才能显示正确结果
-- gcxy2表有134条数据
SELECT a.cata_id , a.status
from data_catalog a left join gcxy2 b on a.cata_id = b.cata_id
-- where a.cata_id in (SELECT cata_id from gcxy2) 限制句加上才对,不加就显示1千多条
ORDER BY a.cata_id;