我正在创建一个数据库,该数据库将包含可以使用多个标签标记的各种艺术家。这是一个标准的多对五关系,我的数据库看起来像这样:
artist:
ID
name
tag:
ID
name
tagID:
tagID
artistID
假设我有两个tagID,X和Y.我想要做的是找到所有与标签X和Y有共同点的标签。我该怎么办?
最终我想要变成的是一个界面,让你找到一个标有一组任意标签的艺术家。为了简化这个过程,我想过滤掉不会产生任何结果的标签组合。
答案 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' )
/