私が開発しているアプリケーションでは、ユーザーが入力した検索条件を保存し、定期的に (たとえば毎日) 実行して、結果をユーザーに送信できるようにする必要があります。さらに、実行ごとに条件レコードが更新され、最新の実行時刻と前回以降に見つかった新しい結果の数が示されます。
ThingColors および ThingKinds リレーション テーブルを使用して、Colors テーブルおよび Kinds テーブルと多対多のリレーションを持つ Thing というテーブルに対して検索が実行されます。各 Thing は、少なくとも 1 つの Color と 1 つの Kind に関連付けられている必要があり、Name と Rate が必要です。
Things Colors Kinds ThingColors ThingKinds
------ ------ ----- ----------- ----------
ThingId: int ColorId: int KindId: int ThingId: int ThingId: int
ThingName: varchar Name: varchar Name: varchar ColorId: int KindId: int
Description: varchar
Rate: int
AddedOn: datetime
保存された基準の表は次のようになります。Criteria は、Colors および Kinds とも多対多の関係にあります。検索条件 (MinRate、MaxRate、Color、および Kind) は必須ではありませんが、少なくとも 1 つを指定する必要があります。検索基準で 1 つ以上の色が指定されている場合、結果に含めることができるように、一致する色が少なくとも 1 つ存在する必要があります。同じタイプの条件が Kind に適用されます。
Criteria CriteriaColors CriteriaKinds
-------- -------------- -------------
CriteriaId: int CriteriaId: int CriteriaId: int
UserId: int ColorId: int KindId: int
CriteriaName: varchar
MinRate: int
MaxRate: int
NewResults: int
LatestRanOn: datetime
結果を生成するための効率的なクエリを探しています (各基準に対して一致したモノのリスト)。同じクエリ内で、新しく見つかった一致 (Criteria の LatestRanOn の後に AddOn を持つもの) の数で Criteria を更新し、LatestRanOn も更新する方法はありますか?
現在、SQL Server 2008 を使用しています。