作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Microsoft SQL Server,但我想这个问题适用于所有 SQL 语言。如果我有:
SELECT OrderHeaderID
,isNull(Qty,0) AS Qty
FROM OrderHeader
LEFT JOIN (
SELECT OrderHeaderID
,Sum(Qty) AS Qty
FROM OrderDetail
GROUP BY OrderHeaderID
) OrderDetail
ON OrderDetail.OrderHeaderID = OrderHeader.OrderHeaderID
WHERE Criteria = 'X'
然后是否会在应用条件之前对所有 OrderDetail 行执行 GROUP BY?换句话说,我是否应该注意将条件应用于 GROUP BY 以及外部 SELECT?
顺便说一句,如果您发现这行代码有任何改进,请也发表评论。
最佳答案
关于您的第一个问题,很难说出优化器在编译查询时发现了什么。我认为您的内部聚合首先执行。
关于你的第二个问题,这两种选择可能更容易理解
SELECT OrderHeader.OrderHeaderID
,isNull(Sum(OrderDetail.Qty),0) AS Qty
FROM OrderHeader
LEFT JOIN OrderDetail
ON OrderDetail.OrderHeaderID = OrderHeader.OrderHeaderID
WHERE OrderHeader.Criteria = 'X'
GROUP BY OrderHeader.OrderHeaderID
或
select OrderHeaderId,
IsNull(
(Select sum(qty) from OrderDetails d
where d.OrderHeaderId = OrderHeader.OrderHeaderId)
,0) as qty
from OrderHeader
where Criteria='X'
关于sql - ON 条件是否限制了加入的选择所做的工作量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14094054/
我是一名优秀的程序员,十分优秀!