mysql - 在 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 = ?
解决方案
两个查询都以标准方式编写,几乎可以在所有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;
推荐阅读
- python - 数据框滚动大于 0 计数
- java - 从上述棉花糖设备上的应用程序中清除所有最近的应用程序
- java - 获取异常是 java.net.SocketException: Connection reset
- elasticsearch - 按“是数组中的项”对结果进行排序
- intellij-idea - sbt.compiler.EvalException:表达式中的类型错误
- python - 表数据问题
- python - 将 Dataframe 列与 numpy ndarray 进行比较并更新 dataframe 中的值
- install4j - Install4j 隐藏错误信息
- javascript - window.open 在边缘浏览器中返回 null 作为子窗口引用
- python - 使用烧瓶时无法执行原始sql