【发布时间】: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 来查看差异。但我相信第二个是最好的选择,因为它是直截了当的,并且不必在主查询之前先进行内部查询。
-
我认为第二种语法更常见,因为它不那么冗长。