Mysql 表的左连接部分

Mysql 表的左连接部分,mysql,sql,left-join,Mysql,Sql,Left Join,我正在尝试使用left join连接两个表,即table1 left join table2。 我只想将A中的部分行与B连接起来。建议我使用子查询来筛选表1中的行,还是在where子句中避免这些行以提高查询性能 select t1.a ,t1.b ,t2.c from (select * from table1 where a='x' ) t1 LEFT JOIN table2 t2 on t1.d=t2.d 或 检查查询计划,但我怀疑它会

我正在尝试使用left join连接两个表,即
table1 left join table2
。 我只想将A中的部分行与B连接起来。建议我使用子查询来筛选表1中的行,还是在where子句中避免这些行以提高查询性能

select t1.a
    ,t1.b
    ,t2.c
from (select * 
      from table1 
      where a='x'
     ) t1 LEFT JOIN table2 t2 on t1.d=t2.d


检查查询计划,但我怀疑它会有什么不同。

这取决于数据库的结构和内容。最好的方法是查看查询计划,并对两个版本的查询进行比较


您可以发现此文档很有用:

它们的实现可能是相同的。在这两个查询中使用
EXPLAIN
时,您是否看到任何差异?只需使用EXPLAIN-see-将告诉您语句是如何执行的尝试使用EXPLAIN查看差异。但是我认为第二种语法是最好的选择,因为它是直接的,并且不必在主查询之前先进行内部查询。我认为第二种语法更常见,因为它不太冗长。
select t1.a
       ,t1.b
       ,t2.c
from table1 t1 LEFT JOIN table2 t2 on t1.d=t2.d 
where t1.a='x'