2009-09-22 22 views
3

我有這三個表來存儲相冊的標籤。這裏是模式給出這3個表生成標籤雲計數

表1:相冊
Album_ID
ALBUM_NAME

表2:AlbumTags
TAG_ID
TAG_NAME

表3:AlbumTagBridge
ID
TAG_ID
Album_ID

什麼是最有效的SQL要能拿出一個結果集,看起來像這樣:

TAG_NAME |計數
標籤1 | 19
標籤2 | 3
標籤3 | 17

回答

2
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 
+0

我假設你不關心專輯,但只是標記統計他們所有。 – 2009-09-22 03:18:56

0
Select Tag_Name, COUNT(AlbumTagBridge.ID) 
From AlbumTags 
Join AlbumTagBridge USING(Tag_ID) 
Group By Tag_Name 

分組由AlbumTags.Tag_ID, Tag_name有可能會是一點點便宜取決於你的索引& C(特別是如果你的SQL引擎是不是所有的聰明;-),但因爲你告訴我們任何關於你的指數也無法左右你的引擎是關於我們能做的最好的。

+0

現在我沒有任何索引。我正在使用SQL Server 2008 – leora 2009-09-22 03:11:41

+0

此代碼還假定標記名稱是唯一的;即沒有兩個標籤的ID不同但名稱相同。我認爲這是一個很好的假設,應該用一個獨特的約束來強制執行。 – Bugmaster 2009-09-22 03:13:00

+0

這是一個很好的假設 – leora 2009-09-22 03:15:38