所以,我知道足够多的 SQL 是危险的,并且正在按照一个示例从表中提取一页的记录:
SELECT TOP #arguments.perPage# * FROM (
SELECT DISTINCT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rownum, productdiagramparts.productdiagramid AS productdiagramid, products.id AS productid, products.title AS producttitle, totalRows = COUNT(*) OVER()
FROM manufacturers
INNER JOIN products ON manufacturers.id = products.manufacturerid
INNER JOIN productdiagramparts ON products.id = productdiagramparts.productid
INNER JOIN productdiagrams ON productdiagramparts.productdiagramid = productdiagrams.id
WHERE #whereClause#
) _tmpInlineView
WHERE rownum > #offset#
ORDER BY producttitle
围绕它的 SELECT TOP 当然只提取当前页面的记录。麻烦的是,我想删除的最里面的 SELECT 语句中有重复项,但是使用 DISTINCT 不能如上所示,因为行已经为外部查询编号。如何在对行编号之前使我最里面的 SELECT 结果不同?
这是基于以下公认答案的解决方案:
选择顶部#arguments.perPage# * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rownum, productdiagramid, productid, producttitle, totalRows = COUNT(*) OVER() FROM (
SELECT DISTINCT productdiagramparts.productdiagramid AS productdiagramid, products.id AS productid, products.title AS producttitle FROM Manufacturers INNER JOIN products ON Manufacturers.id = products.manufacturerid INNER JOIN productdiagramparts ON products.id = productdiagramparts.productid INNER JOIN productdiagrams ON productdiagramparts.productdiagramid = productdiagrams.id WHERE #whereClause#
) _tmpDupRemove
) _tmpInlineView
WHERE rownum > #offset# ORDER BY producttitle