在下面的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
答案 0 :(得分:4)
由于问题没有尽可能清楚地写出来,我假设你问distinct
是否由于存在group by
而无关。
如果内部查询因inner join
而返回多条记录,那么您需要distinct
。否则,right outer join
将加入比您想要的更多的记录,而SUM()
之类的内容将不会返回相同的值。
所以DISTINCT
并非无关紧要。
答案 1 :(得分:2)
由于我们并不确切地知道您要完成什么,这可能不适用,但是......
如果在使用JOIN时获得的行显得多余,则在添加DISTINCT之前,应仔细检查ON
条件,以确保表格正确连接。如果测试不够具体,您可能会允许额外的行匹配而不应该匹配。
答案 2 :(得分:0)
您是否看过执行计划,看看是否与DISTINCT存在差异?这应该回答你的问题。