在Where子句上写条件是更好还是ON子句?

时间:2018-06-01 14:50:34

标签: mysql sql join

哪种查询是标准的和最佳的?

此:

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 = ? 

1 个答案:

答案 0 :(得分:0)

两个查询都以标准方式编写,几乎可以在所有 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;