【发布时间】:2011-07-28 09:08:12
【问题描述】:
第一个查询
--645 rows
SELECT *
FROM (
SELECT DISTINCT
cu.*,
ROW_NUMBER() OVER ( ORDER BY cu.Id ) AS RowNum
FROM Customers cu
LEFT JOIN dbo.CustomerCategories cc
ON cc.CustomerId = cu.Id
LEFT JOIN dbo.CustomerServices cs
ON cs.CustomerId = cu.Id
WHERE ( @FullName IS NULL
OR cu.FullName LIKE @FullName
)
AND ( @CategoriesIdXml IS NULL
OR cc.CategoryId IN ( SELECT *
FROM @CategoriesList )
)
AND ( @ServicesIdXml IS NULL
OR cs.ServiceId IN ( SELECT *
FROM @ServicesList )
)
) AS _
WHERE RowNum BETWEEN ( @PageIndex - 1 ) * @PageSize + 1
AND @PageIndex * @PageSize
第二次查询
--41 rows
SELECT *
FROM (
SELECT DISTINCT
cu.*,
ROW_NUMBER() OVER ( ORDER BY cu.Id ) AS RowNum
FROM Customers cu
-- LEFT JOIN dbo.CustomerCategories cc
-- ON cc.CustomerId = cu.Id
-- LEFT JOIN dbo.CustomerServices cs
-- ON cs.CustomerId = cu.Id
--WHERE ( @FullName IS NULL
-- OR cu.FullName LIKE @FullName
-- )
-- AND ( @CategoriesIdXml IS NULL
-- OR cc.CategoryId IN ( SELECT *
-- FROM @CategoriesList )
-- )
-- AND ( @ServicesIdXml IS NULL
-- OR cs.ServiceId IN ( SELECT *
-- FROM @ServicesList )
-- )
) AS _
WHERE RowNum BETWEEN ( @PageIndex - 1 ) * @PageSize + 1
AND @PageIndex * @PageSize
第二个查询返回正确的结果集(41 行),但第一个查询返回错误的 645 行。但是我在两个查询中都使用了DISTINCT,我想知道为什么首先返回太多行。
如何避免?
【问题讨论】:
标签: sql-server sql-server-2008-r2