使用与众不同

时间:2010-06-04 14:04:21

标签: sql

在下面的SQL语句中,我应该使用DISTINCT,因为我的Where子句中有Group By?想法?

SELECT [OrderUser].OrderUserId, ISNULL(SUM(total.FileSize), 0), ISNULL(SUM(total.CompressedFileSize), 0)
FROM 
(
 SELECT DISTINCT ProductSize.OrderUserId, ProductSize.FileInfoId, 
 CAST(ProductSize.FileSize AS BIGINT) AS FileSize, 
 CAST(ProductSize.CompressedFileSize AS BIGINT) AS CompressedFileSize
 FROM ProductSize WITH (NOLOCK)
 INNER JOIN [Version] ON ProductSize.VersionId = [Version].VersionId
) AS total RIGHT OUTER JOIN [OrderUser] WITH (NOLOCK) ON total.OrderUserId = [OrderUser].OrderUserId
WHERE NOT ([OrderUser].isCustomer = 1 AND [OrderUser].isEndOrderUser = 0 OR [OrderUser].isLocation = 1) 
AND [OrderUser].OrderUserId = 1
GROUP BY [OrderUser].OrderUserId

3 个答案:

答案 0 :(得分:4)

由于问题没有尽可能清楚地写出来,我假设你问distinct是否由于存在group by而无关。

如果内部查询因inner join而返回多条记录,那么您需要distinct。否则,right outer join将加入比您想要的更多的记录,而SUM()之类的内容将不会返回相同的值。

所以DISTINCT并非无关紧要。

答案 1 :(得分:2)

由于我们并不确切地知道您要完成什么,这可能不适用,但是......

如果在使用JOIN时获得的行显得多余,则在添加DISTINCT之前,应仔细检查ON条件,以确保表格正确连接。如果测试不够具体,您可能会允许额外的行匹配而不应该匹配。

答案 2 :(得分:0)

您是否看过执行计划,看看是否与DISTINCT存在差异?这应该回答你的问题。