【问题标题】:Left join part of the table表的左连接部分
【发布时间】:2013-11-16 19:43:01
【问题描述】:

我正在尝试使用左连接来连接两个表,即table1 left join table2。 我只希望 A 中的部分行与 B 连接。是否建议我使用子查询来过滤 table1 中的行或在 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

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

【问题讨论】:

  • 它们的实现可能相同。当您在两个查询中使用EXPLAIN 时,您发现有什么不同吗?
  • 只需使用说明 - 请参阅 dev.mysql.com/doc/refman/5.0/en/explain.html - 将告诉您语句是如何执行的
  • 尝试使用 EXPLAIN 来查看差异。但我相信第二个是最好的选择,因为它是直截了当的,并且不必在主查询之前先进行内部查询。
  • 我认为第二种语法更常见,因为它不那么冗长。

标签: mysql sql left-join


【解决方案1】:

检查查询计划,但我怀疑它会有所作为。

【讨论】:

    【解决方案2】:

    这在很大程度上取决于您的数据库的结构和内容。最好的方法是查看查询计划并比较两个版本的查询。

    您会发现此文档很有用:MySQL Query Execution Plan

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-24
      • 2019-10-03
      • 2021-07-29
      • 1970-01-01
      • 2017-12-22
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多