【发布时间】:2025-12-18 15:30:01
【问题描述】:
this question 上有一个与此相关的答案。但我觉得它值得自己提出一个问题。
This question,它被标记为与第一个重复但实际上并非如此,这是我想问的......正如它在位中所说的那样:
这个问题已经被问过并且已经有了答案。如果这些答案不能完全解决您的问题,请提出新问题。
所以我要问一个新问题。
我可以写一个查询:
SELECT *
FROM customer_order co
JOIN customer c
ON c.id = co.customer_id
AND c.type = 'special'
JOIN order o
ON o.id = co.order_id
AND o.status = 'dispatched'
或者:
SELECT *
FROM customer_order co
JOIN customer c
ON c.id = co.customer_id
JOIN order o
ON o.id = co.order_id
WHERE c.type = 'special'
AND o.status = 'dispatched'
我绝对喜欢第一种方式,尤其是在更复杂的查询中,因为它将条件与它们所操作的表分组在一起,这使我更容易阅读和识别适当的复合索引。这也意味着如果我想换成LEFT JOIN(或者可能是RIGHT JOIN,我并没有真正使用RIGHT JOIN),所有的条件都在正确的地方。
不过,社区中似乎有些偏爱第二种方式。
有没有人知道这种偏好是否有根据,可能是由于某些性能问题或某些我尚未偶然发现的可读性问题?还是我可以继续快乐地做一个叛逆者?
【问题讨论】:
-
谢谢伊恩,是的,更多的方法!但是,this question 中几乎涵盖了该方法。
-
不错的链接,我实际上并不确定。看起来您问题中的两个链接都是相同的。我也对这个问题的答案很感兴趣。
-
@IanSellar 啊,已更正第二个链接!看起来我们有一个神秘的downvoter,我对无法解释的批评持批评态度。我希望得到一个体面的答案。
-
如何用大量数据填充您的示例表并查看两个查询的执行计划。我承认我是一个保守的人,并且将连接条件用于连接两个表的条件和 where 子句来限制结果。我认为这是按功能对条件进行分组。我没有使用隐式连接,因为它们很容易出错并且不会与外部连接真正混合。
-
因主要基于意见而关闭? OP 特别问:“有没有人知道这种偏好是否有根据,也许是在一些性能问题或一些我还没有偶然发现的可读性问题上?”换句话说,不是基于意见,而是要求使用其中一个或另一个的理由。 “没有区别,只是意见”可能是一个有效的答案,但这不是结束的理由。
标签: mysql