mysql查询多对多关系表 - '关系师'?

时间:2012-08-17 17:01:04

标签: mysql

给出下表(描述多对多关系):

ID  | PageID | TagID
--------------------
1   | 1      | 1
2   | 1      | 2
3   | 2      | 2
4   | 2      | 3

如何选择“所有所有 TagID列表的所有PageID?” 换句话说:我想要所有标记有TagID 1和2的页面(所以在这个例子中它只是PageID 1)

经过一些谷歌搜索后,我发现了“关系师”这个词可能与此相关,但我并没有得到它。有人对我的问题进行简单查询吗?

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)”。