left join为什么执行计划中是inner join?

Viewed 74

版本2.0.2
条件:t1表40w+,t2表70w+,t2积累的数据比较多,t1是新表

explain SELECT * FROM t1 left OUTER JOIN t2 ON t1.date = t2.dt AND t1.hour = t2.hour AND t1.pchannel = t2.pchannel WHERE t1.date = '2024-10-08' AND t2.dt = '2024-10-08' and t1.media_type = '2' and t2.pchannel='xxx';
执行计划中为什么显示的inner join这个比较费解,改变了语义,这个条件中左表里有数据右表里没有数据,想要的结果是如果右表里没有数据左表的也会展示出来

1 Answers

如果使用left join以A为主表,并查询A表全部数据,和关联的B表数据
where后面就不能出现B表的条件,否则会变成inner join效果,或理解为单表查询效果。
where条件是在表连接之后执行,on条件是在表连接之前执行。