首页 > 解决方案 > 在 Where 子句更好还是 ON 子句上编写条件?

问题描述

哪个查询是标准的和最优的?

这个:

SELECT p.*
FROM posts p
JOIN favorites f ON p.id = f.post_id
WHERE f.user_id = ? 

或这个:

SELECT p.*
FROM posts p
JOIN favorites f ON p.id = f.post_id
 AND f.user_id = ? 

标签: mysqlsqljoin

解决方案


两个查询都以标准方式编写,几乎可以在所有DBMS中使用。但是,如果您担心性能,那么我会EXISTS改用。

select p.*
from posts p
where exists (select 1 
              from favorites f 
              where p.id = f.post_id and f.user_id = ?
             );

对我来说,在子句中过滤ON或在WHERE子句中过滤只是样式的标准INNER JOIN。所以,我会选择WHERE条款:

SELECT p.*
FROM posts p INNER JOIN 
     favorites f 
     ON p.id = f.post_id
WHERE f.user_id = ? 
ORDER BY f.date_time DESC;

推荐阅读