【发布时间】:2009-09-22 03:04:47
【问题描述】:
我有这三个表来存储相册的标签。这是架构
表 1:专辑
专辑_ID
专辑名称
表 2:专辑标签
标记_ID
Tag_Name
表 3:AlbumTagBridge
身份证
标记_ID
专辑_ID
能够得出如下结果集的最有效 SQL 是什么:
标签名称 |计数
标签 1 | 19
标签 2 | 3
标签 3 | 17
【问题讨论】:
我有这三个表来存储相册的标签。这是架构
表 1:专辑
专辑_ID
专辑名称
表 2:专辑标签
标记_ID
Tag_Name
表 3:AlbumTagBridge
身份证
标记_ID
专辑_ID
能够得出如下结果集的最有效 SQL 是什么:
标签名称 |计数
标签 1 | 19
标签 2 | 3
标签 3 | 17
【问题讨论】:
SELECT dbo.AlbumTags.Tag_Name,
COUNT(dbo.AlbumTagBridge.Tag_Id) AS Cnt
FROM dbo.AlbumTagBridge
INNER JOIN dbo.AlbumTags ON dbo.AlbumTagBridge.Tag_Id = dbo.AlbumTags.Tag_ID
GROUP BY dbo.AlbumTags.Tag_Name
【讨论】:
Select Tag_Name, COUNT(AlbumTagBridge.ID)
From AlbumTags
Join AlbumTagBridge USING(Tag_ID)
Group By Tag_Name
按AlbumTags.Tag_ID, Tag_name 分组可能会便宜一些,具体取决于您的索引和c(特别是如果您的SQL 引擎不是那么聪明;-),但是由于您没有告诉我们有关您的索引或引擎的任何信息,所以这是关于我们能做的最好的事情。
【讨论】:
Join AlbumTagBridge ON AlbumTagBridge.Tag_ID = AlbumTags.Tag_ID -- 不知道为什么它会反对USING,但它似乎是!-)