我有一个简单的表结构,表示Images和Tags之间的多对多关系。FooID列是uniqueidentifier
s (GUID)。名称和路径是nvarchar
s。
我有一组标签,需要选择一个图像显示在每个标签旁边。图片应该是第一个按 Path 排序的,即MIN(Path)
.
到目前为止,我已经能够通过为每个 TagID 执行单个 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 来一次性获取这些数据吗?只要至少有一张应用了该标签的图像,结果集就应该为每个提供的 TagID 保留一行。
SELECT ImageID, TagID
/* ... ??? ... */
WHERE TagID IN (@p0, @p1, @p3, ...)