SQL Server データベースで非常に特殊な状況が発生し、昨日から検索を続けています... しかし、今はあきらめなければなりません。
私は
Documentテーブル (DocumentID (PK), ArchiveNoなど)
そして
LanguageVersionテーブル (など) は、 (1 つのドキュメントには (n) 個の言語バージョンがLanguageVersionID (PK), LanguageVersionID (FK), ReleaseDate, Languageあります) と 1 対 1 の関係があります。Document
ユーザー検索の後、ユーザーが表示できるリストが既にありDocumentます。ReleaseDateこれらは、表にある でソートする必要がありLanguageVersionます。
だから私はそれに参加LanguageVersionし、当然のことながらDocumentエントリの重複が発生し、この結果を でソートしReleaseDate、DocumentID.
わかりました-これまでのところDocumentID、正しい順序で のリストを取得しましたが、重複があります。
結果を表示するには、これらの結果を 20 ページの !!Documents!! ごとにグループ化する必要があります。したがって、私は2つの可能な解決策を見つけました.ROW_NUMBER()-OVER()句またはSQL Server 2012には、ORDER-BY句の新しい拡張がありますOFFSETand FETCH NEXT.
問題は、範囲選択のベースとして行番号を生成するために、これらの両方が順序付け列を必要とすることです。
ReleaseDateこの順序付けの一時的な結果にを保持すると、 のすべての複製が異なるを持つDocumentIDため、 の区別は失敗します。DocumentIDReleaseDatesを切り落とすと
ReleaseDate、 を実行できますがDISTINCT、範囲インデックスを生成するための順序付け列が失われます。
私は非常にイライラしています。なぜなら、LIMIT順序付けなしで句を使用しても問題のない MySQL に慣れているからです。
SQL Server に同等のものはありませんか?
私はすでに文書の結果を正しい順序で持っていますが、唯一の問題は重複です。私が欲しいのはDISTINCT、 on でDocumentID、そこから x から y までの範囲を選択することだけです。
よろしくお願いします、クリス