Artist-tag数据库:获取标签

时间:2009-12-16 15:55:45

标签: sql database many-to-many tags

我正在创建一个数据库,该数据库将包含可以使用多个标签标记的各种艺术家。这是一个标准的多对五关系,我的数据库看起来像这样:

artist:  
 ID
 name  

tag:
 ID
 name

tagID:
 tagID
 artistID

假设我有两个tagID,X和Y.我想要做的是找到所有与标签X和Y有共同点的标签。我该怎么办?

最终我想要变成的是一个界面,让你找到一个标有一组任意标签的艺术家。为了简化这个过程,我想过滤掉不会产生任何结果的标签组合。

2 个答案:

答案 0 :(得分: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)

分享并享受。

答案 1 :(得分:0)

此解决方案使用INTERSECT集合运算符来识别同时具有标记X和标记Y的艺术家的TagID记录。如果使用不支持该集合运算符的数据库,则必须使用改为使用普通连接。

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' )
/