我需要LEFT JOIN但是"对" table非常大,我只需要在2018-01-01之后的值,而整个表都有从2012年开始的记录。为了加快我的查询,我因此不需要LEFT JOIN全表,而是带有记录的表> 2018年1月1日。如果我在查询结束时使用where语句,它仍然会使用完整的表格吗?我怎么能这样做?
答案 0 :(得分:1)
您可以将where过滤器放在连接中。
select * from tableA a
left Join tableB b on a.id=b.id and b.date > 2018-01-01
where a.field =''
答案 1 :(得分:1)
将约束放在where子句中的行为与放入on子句的行为不同。
原因是首先执行外连接,然后执行where子句。查询中的任何行在可选表中都没有匹配,日期列将为null。接下来应用您的where子句,因为null<>什么,你会丢弃所有这些行。基本上,您将外部联接转换为内部联接。这就是为什么你想在on子句中对可选表格施加任何约束的原因,如Dave Kelly的回答所示。