[英]SQL ROW_NUMBER() … between x and y breaks Inner join
我有這個內部連接語句,大多數情況下都可以使用,但是當我添加自定義分頁時,連接將返回一個空集。 任何建議將不勝感激。
這將返回我期望的結果
SELECT [Id]
,[Title]
FROM
(SELECT [Id]
,[Title]
,ROW_NUMBER() OVER(ORDER BY id) as RowNum from Art) as e
INNER JOIN [ArtCat] p ON e.Id = p.ArtId
WHERE
p.CatId = @CategoryNum
這將返回一個空集
SELECT [Id]
,[Title]
FROM
(SELECT [Id]
,[Title]
,ROW_NUMBER() OVER(ORDER BY id) as RowNum from Art) as e
INNER JOIN [ArtCat] p ON e.Id = p.ArtId
WHERE
p.CatId = @CategoryNum
AND RowNum BETWEEN @startIndex AND (@startIndex + @pageSize)
提前致謝!
格式化有點難讀,但是語法很好,為什么不檢查rownum的邊界呢?
SELECT MIN(RowNum),MAX(RowNum)
FROM (SELECT [Id]
,[Title]
,ROW_NUMBER() OVER(ORDER BY id) as RowNum
FROM Art
) as e
INNER JOIN [ArtCat] p ON e.Id = p.ArtId
WHERE p.CatId = @CategoryNum
奇怪的是,您應該在限制p.CatId = @CategoryNum
之后使用RowNum
猜測這項工作:
SELECT [Id]
,[Title]
FROM (SELECT [Id]
,[Title]
,ROW_NUMBER() OVER(ORDER BY id) as RowNum
FROM (SELECT [Id]
,[Title]
FROM Art
) as e
INNER JOIN [ArtCat] p ON e.Id = p.ArtId
WHERE p.CatId = @CategoryNum
)sub
WHERE RowNum BETWEEN @startIndex AND (@startIndex + @pageSize)
山羊CO你真的有幫助! 謝謝。 我們最終使用的代碼是。
SELECT
ROW_NUMBER() OVER(ORDER BY id) as e.RowNum
,e.[Id]
,e.[Title]
FROM (SELECT
[Id]
,[Title]
,ROW_NUMBER() OVER(ORDER BY id) as RowNum
FROM
(SELECT
ROW_NUMBER() OVER(ORDER BY id) as RowNum
,[Id]
,[Title]
FROM Art
INNER JOIN [ArtCat] p ON e.Id = p.ArtId
WHERE p.CatId = @CategoryNum
) as e
WHERE
e.RowNum BETWEEN @startIndex AND (@startIndex + @pageSize)
要對結果進行預過濾(如您所用),但要在外部表上再排一行以真正組織結果。
我的同事也抱怨我的格式太..哈
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.