私がやろうとしているのはこれです:
SELECT *
FROM MainTable m
INNER JOIN JoinedTable j on j.ForeignID = m.ID
INNER JOIN (SELECT TOP 1 *
FROM SubQueryTable sq
WHERE sq.ForeignID = j.ID
ORDER BY VersionColumn DESC)
したがって、基本的に、SubQueryTable から、JoinedTable から取得できる特定の ID を持つすべての行の VersionColumn の最大値を持つ単一の行のみを取得したいと考えています。
T-SQL ではこれを行うことができません。この問題を解決する良い方法は何ですか?
私が防止しようとしているのは、SubQueryTable 全体をロードし、遅すぎるときにフィルタリングを行うことです....
SELECT *
FROM MainTable m
INNER JOIN JoinedTable j on j.ForeignID = m.ID
INNER JOIN (SELECT TOP 1 *
FROM SubQueryTable sq
ORDER BY VersionColumn DESC) sj ON sj.ForeignID = j.ID
この 2 番目のバージョンでは、最初に非常に遅いサブクエリが実行され、すべての行が読み込まれたときにのみフィルター処理されるのではないかと心配していますが、もっと早くフィルター処理したいと考えています。
何かご意見は?