2009-09-22 3 views
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

Я предполагаю, что вы не заботитесь о своих альбомах, но только теги подсчитывают их все. –

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

Группировка по AlbumTags.Tag_ID, Tag_name может быть, возможно, чуть-чуть дешевле, в зависимости от индексации & с (особенно, если ваш SQL двигатель не все, что умный ;-), но так как вы ничего не говорит нам о ваших показателях, ни о ваш движок - это самое лучшее, что мы можем сделать.

+0

прямо сейчас у меня нет индексации вообще. Я использую SQL-сервер 2008 – leora

+0

Этот код также предполагает, что имена тегов уникальны; то есть нет двух тегов, идентификаторы которых отличаются друг от друга, но имена одинаковы. Я думаю, что это хорошее предположение, которое должно применяться с уникальным ограничением. – Bugmaster

+0

Это прекрасное предположение – leora

Смежные вопросы