ImagesとTagsの間の多対多の関係を表す単純なテーブル構造があります。FooID列はs (GUID) です。名前とパスはs.uniqueidentifier
nvarchar
タグのセットがあり、それぞれの横に表示する単一の画像を選択する必要があります。画像は、パスで並べ替えられた最初の画像、つまりMIN(Path)
.
これまでのところ、TagID ごとに 1 つの SELECT ステートメントを実行することでこれを行うことができました。
SELECT TOP 1 Images.ImageID
FROM Images
inner join ImageTags on Images.ImageID = ImageTags.ImageID
inner join Tags on ImageTags.TagID = Tags.TagID
WHERE Tags.TagID = @p0
ORDER BY Images.Path
ただし、これには疑問が残ります。より良い方法はありますか? TagID のセット全体を渡して、このデータを一度に取得できますか? そのタグが適用された画像が少なくとも 1 つある限り、結果セットには提供された TagID ごとに 1 つの行が含まれている必要があります。
SELECT ImageID, TagID
/* ... ??? ... */
WHERE TagID IN (@p0, @p1, @p3, ...)