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

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

最佳答案

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

关于mysql - 条件写在 Where 子句上好还是 ON 子句好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50646074/

相关文章:

php - MySQL 数据库 - 将输入的数据传输到文本文件(PHP、HTML、SQL)

ruby-on-rails - 在 ruby​​ on rails 中查找关联中的所有 nil

postgresql - 如何将 SQL 连接重写为窗口函数?

python - 根据最接近的日期时间合并两个数据框

mysql - 如果转储时无法排除,如何导入 MySQL 数据库并跳过表

mysql - ErrorException (E_ERROR) undefined variable : buildingSections

sql - 如何将多个重复行转换为 SQL (Postgres) 中的数组?

Java mySQL 查询不使用变量

mysql - 我正在与 DATA_ADD 作斗争

sql - 在事件表上更新 id 列的标识规范