我有三个表:user(用户)、user_tag(用户标签)和tag(标签)。以下是这些表的最基本元素。
用户通过中间表user_tag与标签相关联。每个用户可以有零个或多个标签。我希望找到具有一个或多个匹配标签的用户。
user(用户)
Column | Type | Modifiers
-------------+--------------------------------+---------------------------------
id | integer | not null
name | character varying(150) | not null
用户标签
Column | Type | Modifiers
------------+--------------------------------+-----------
id | integer | not null
user_id | integer |
tag_id | integer |
标签
Column | Type | Modifiers
-------------+--------------------------------+---------------------------------
id | integer | not null
name | character varying(64) | not null
因此,查找只有一个标签的用户很简单:
select u.id,u.name,g.name
from user u
join user_tag t on t.user_id = u.id
join tag g on g.id = t.tag_id
where g.name='TAGX';
我的问题是,如何匹配两个或多个标签?
像下面这样做是行不通的。
select u.id,u.name,g.name
from user u
join user_tag t on t.user_id = u.id
join tag g on g.id = t.tag_id
where (g.name='TAGX' and g.name='TAGY');
感觉好像需要进行第二次连接才能匹配第二个标签...?