MySQL:关系部门 - 用例

时间:2016-04-06 12:12:02

标签: mysql relational-division

似乎无法将不同类型的信息拼凑起来以获得我想要的东西,所以这里就是..

三个不同的表格:

Entities
id    name
 1      A
 2      B
 3      C
Tags
id    name
 1    tag_1
 2    tag_2
 3    tag_3
Users
id    name
 1    user_1
 2    user_2

两个实体:标签和用户:标签与实体和具有任意数量标签的用户的1:n关系。有两个表来处理这些关系; entities_tags和users_tags。例如:

entities_tags
entity_id    tag_id
 1              1
 1              2
 2              1
 2              2
 2              3
 3              1
users_tags
user_id    tag_id
 1            1
 1            2

现在,给定一个用户,我想获取其标签全部包含在用户标签中的所有实体。在我的示例中,user_1应该获取实体A和C.如果需要,我可以单独获取用户标签,如下所示。

我试过

SELECT entities.*
    (SELECT GROUP_CONCAT(entities_tags.name SEPARATOR ', ')) AS tags
FROM entities
LEFT OUTER JOIN entities_tags ON entities_tags.entity_id = entities.id
LEFT OUTER JOIN tags ON tags.id = entities_tags.tag_id
WHERE tags.name IN ('tag_1','tag_2')
GROUP BY entities.id
HAVING COUNT(tags.name) = 2

但这只会给我A和B而不是C.我不应该得到B,但我应该得到C.

0 个答案:

没有答案