【发布时间】:2014-02-07 09:25:45
【问题描述】:
我今天打错了一个查询,但它仍然有效并给出了预期的结果。我的意思是运行这个查询:
SELECT e.id FROM employees e JOIN users u ON u.email=e.email WHERE u.id='139840'
但我不小心运行了这个查询
SELECT e.id FROM employees e JOIN users u ON u.email=e.email AND u.id='139840'
(请注意最后一个子句中的AND 而不是WHERE)
并且两者都从用户 ID 返回了正确的员工 ID。
这两个查询有什么区别?第二种形式是否只加入符合条件的 2 个表的成员,而第一种形式将加入整个表,然后运行查询?一个比另一个效率更高还是更低?我还缺少其他东西吗?
谢谢!
【问题讨论】:
-
查询优化器可能会将它们视为等价的,因为它们具有相同的含义......
-
如果您要切换到 LEFT OUTER JOIN,那么只有第二个 woud 会“按预期”工作
标签: mysql sql performance inner-join