11

2 つのクエリの UNION から TOP N レコードを選択する最良の方法は何ですか?

できない

SELECT TOP N ... FROM
   (SELECT ... FROM Table1
    UNION
    SELECT ... FROM Table2)

両方のクエリが膨大な結果を返すため、可能な限りあらゆる最適化が必要であり、すべてを返すことは避けたいと考えています。同じ理由で、最初に #TEMP テーブルに結果を挿入することもできません。

SET ROWCOUNT N結果をグループ化する必要がある可能性があり、このコマンドはグループ化された行の数を制限し、基になる行の選択を制限するため、どちらも使用できません。

他のアイデアはありますか?ありがとう!

4

2 に答える 2

0

以下を試すことができます。最初に両方のクエリの結果を提供するCTEを使用し、次にCTEからTOP Nを選択します。

WITH table_cte (
(
    [col1],
    [col2],
    ...
)
AS
(
    SELECT *
    FROM table1
    UNION ALL 
    SELECT *
    FROM table2
)

SELECT TOP 1000 * FROM table_cte
于 2013-05-02T14:27:16.343 に答える