2017-07-05 5 views
1

私のウェブサイトには非常に奇妙な問題があり、最終的には正確な原因を特定することに成功しました。SQL SERVER - FETCH NEXT ROWSは重複した結果を返します

私のEntitiesテーブルには、「Id」、「Title」、「Date」、「Indexing」などのいくつかの列があります。

全文索引で索引付けされた「索引付け」列。

は、次のSQLクエリを考えてみましょう:

SELECT Id 
FROM [dbo].[Entities] AS DocTable 
INNER JOIN CONTAINSTABLE(Entities, Indexing, 'otherCriteria OR criteia') AS KEY_TBL 
ON DocTable.Id = KEY_TBL.[KEY] 
ORDER BY KEY_TBL.RANK DESC 

予想通り、このクエリは動作し、私の周り600結果を得ます。今、私は改ページを追加

: - >私はいつも正確に同じ結果を得る

SELECT Id 
FROM [dbo].[Entities] AS DocTable 
INNER JOIN CONTAINSTABLE(Entities, Indexing, 'otherCriteria OR criteia') AS KEY_TBL 
ON DocTable.Id = KEY_TBL.[KEY] 
ORDER BY KEY_TBL.RANK DESC 
OFFSET 50 ROWS FETCH NEXT 10 ROWS ONLY 

どんなに私が使用している場合は、30または40または50をOFFSET!

本当に奇妙な部分:SELECT内で「タイトル」(例:SELECT ID、タイトル)を選択するように頼んでも、正しい結果が得られます。

アイデア?

+0

を受けた私は、RANKがこのよう... IDによってなぜだけではなく、順序を使用することを意味しているとは思いませんか? –

+0

関連度順に並べ替える必要があります – Illidan

+0

最初に結果をテンポラリテーブルにダンプしてから、魅力的なページをページ分割するとどうなりますか? – Jeremy

答えて

1

OK、私は

In Sql Server 2014 ORDER BY clause with OFFSET FETCH NEXT returns weird results

それを得たと思うことは言う:

ORDER BY句が が一意であることが保証されている列または列の組み合わせが含まれています。

明らかに、「RANK」は一意ではありません。私は私のクエリを変更する場合:

SELECT Id 
FROM [dbo].[Entities] AS DocTable 
INNER JOIN CONTAINSTABLE(Entities, Indexing, 'otherCriteria OR criteia') AS KEY_TBL 
ON DocTable.Id = KEY_TBL.[KEY] 
ORDER BY KEY_TBL.RANK DESC, Id 
OFFSET 50 ROWS FETCH NEXT 10 ROWS ONLY 

私は正しい結果

関連する問題