所以我试图向一些人解释为什么这个查询是个坏主意:
SELECT z.ReportDate, z.Zipcode, SUM(z.Sales) AS Sales,
COALESCE(
(SELECT TOP (1) GroupName
FROM dbo.zipGroups
WHERE (Zipcode = z.Zipcode)), 'Unknown') AS GroupName,
COALESCE(
(SELECT TOP (1) GroupCode
FROM dbo.zipGroups
WHERE (Zipcode = z.Zipcode)), 0) AS GroupNumber
FROM dbo.Report_ByZipcode AS z
GROUP BY z.ReportDate, z.Zipcode
Run Code Online (Sandbox Code Playgroud)
并建议一个更好的方式来写它,当我的老板结束讨论时,"嗯,它已经返回了去年的正确数据,我们没有遇到任何问题,所以没关系."
在这一点上,我想,在世界上,甚至可能是什么?
经过一番挖掘,我发现了这些事实:
所以我的问题有2个部分.
A)即使SELECT TOP查询中没有ORDER BY子句,它们实际上是确定性的,因为聚簇索引基本上是为它提供默认的ORDER BY吗?
B1)如果这是真的,那么查询是否会岌岌可危,实际上正在做它应该做的事情?
B2)如果不是这样,你能帮我证明一下吗?
注意:我已经重写了这个以使用连接,所以我不需要SQL来修复它,我需要将它投入生产中,所以我不再担心它会破坏.