2009-12-16 4 views
1

Я создаю базу данных, которая будет содержать различные исполнители, которые могут быть помечены несколькими тегами. Это стандарт многие ко-МАЕ отношения и моя база данных выглядит следующим образом:База данных тегов-исполнителей: Получение тегов

artist: 
ID 
name 

tag: 
ID 
name 

tagID: 
tagID 
artistID 

Скажем, у меня есть два tagIDs, X и Y. То, что я хочу сделать, это найти все теги, которые имеют художника вместе с тегами X и Y. Как мне это сделать?

В конечном итоге я хочу, чтобы это превратилось в интерфейс, который позволит вам найти художника, помеченного произвольным набором тегов. Чтобы упростить процесс, я хочу отфильтровать комбинации тегов, которые не дадут никакого результата.

+0

Должен ли художник быть помечен как X, так и Y, или она может быть помечена либо X, либо Y? – Ray

+0

Художник должен быть помечен как X, так и Y – Paul

ответ

1
SELECT T.tagID 
    FROM tagID T 
    WHERE T.artistID IN (SELECT T1.artistID 
          FROM tagID T1, 
           tagID T2, 
          WHERE T1.tagID = X AND 
           T2.artistID = T1.artistID AND 
           T2.tagID = Y) 

Делитесь и наслаждайтесь.

+0

Выглядит многообещающе, но у меня возникли проблемы с пониманием вашего кода. Что вы делаете с помощью T1 и T? – Paul

+0

Псевдоним для таблиц. tagID = T1 во внешнем запросе и в подзапросе tagID = T. Он помогает уточнить, из какого экземпляра таблицы идут имена столбцов. –

+0

Получил эту работу сейчас, и это то, что мне нужно. Большое спасибо! – Paul

0

Это решение использует оператор набора INTERSECT для идентификации записей TagID для художников, у которых есть как тег X, так и тег Y. Если вы работаете с ароматом базы данных, которая не поддерживает этот оператор набора, вам придется использовать обычный вместо этого присоединитесь.

select distinct tagid 
from tagid 
where tagid not in ('X', 'Y') 
where artistid in 
     (select artistid 
      from tagid 
      where tagid = 'X' 
     intersect 
     select artistid 
      from tagid 
      where tagid = 'Y') 
/
Смежные вопросы