给出下表(描述多对多关系):
ID | PageID | TagID -------------------- 1 | 1 | 1 2 | 1 | 2 3 | 2 | 2 4 | 2 | 3
如何选择“所有所有 TagID列表的所有PageID?” 换句话说:我想要所有标记有TagID 1和2的页面(所以在这个例子中它只是PageID 1)
经过一些谷歌搜索后,我发现了“关系师”这个词可能与此相关,但我并没有得到它。有人对我的问题进行简单查询吗?答案 0 :(得分:1)
如果您有表格中的tagid列表,那么它是一个简单的连接和分组:
select pageId
from t join
list l
on t.tagId = l.tagId cross join
(select count(*) cnt from list l) as const
group by pageId
having count(*) = max(cnt)
having子句检查是否存在所有标记。如果可能存在重复项,那么在这两种情况下,您都希望将“count(*)”替换为“count(distinct tagid)”。