1

我想知道像这样进行连接查询是否更好:

SELECT * FROM table1
    LEFT JOIN table2 ON table1.field1=table2.id
    AND table2.field2="mystring"
WHERE table2.field2="mystring"

而不是简单地这样做:

SELECT * FROM table1
    LEFT JOIN table2 ON table1.field1=table2.id
WHERE table2.field2="mystring"

MySQL 引擎是在为我做这个优化还是明确地做这个更好?

做 :

SELECT * FROM table1
    JOIN table2 ON table2.field2="mystring" AND table2.id=table1.field1

有同样的效果,结果会一样吗?

编辑:更精确一些,我的问题是:

  • 我假设上述 3 个查询在给定结果方面是等效的。他们真的(尤其是第三个)吗?

  • 我想知道引擎是否在性能方面平等对待它们(换句话说,我是否必须担心使用哪一个)?

4

1 回答 1

2

如果 table2.field2!="mystring" 这仍然会显示 table1 的记录

SELECT * FROM table1
    LEFT JOIN table2 ON table1.field1=table2.id
    AND table2.field2="mystring"

如果 table2.field2!="mystring" 这将不会显示 table1 的记录

SELECT * FROM table1
    LEFT JOIN table2 ON table1.field1=table2.id
WHERE table2.field2="mystring"

输出可以不同。在这种情况下,第一个查询可能会显示比第二个更多的结果。

于 2013-09-06T09:51:08.487 回答