【发布时间】:2019-02-16 18:59:51
【问题描述】:
我在我的 MySQL 数据库中有一个多对多关系,其中三个表如下所示:
TABLE 项目, TABLE 关系(仅存储项目和标签的 id), 表标签
每个项目可以有多个标签,标签也可以与多个项目相关,例如商品“鞋”可以有标签“运动”和“皮革”,而标签“运动”可以与商品“鞋”和“衬衫”相关。
我现在需要做的是选择所有具有一个或多个标签并由 AND 条件组合的项目,例如我想找到所有带有“运动”标签和“皮革”标签的物品。
是否可以仅使用一个查询来检索带有 AND 条件的请求数据,或者我是否需要构建子查询(或类似的东西)?
另一种方法是获取所有带有与 OR 组合的标签的项目,如下所示:
SELECT *
FROM item
LEFT JOIN relation
ON item.id = item_id
LEFT JOIN tag
ON tag.id = tag_id
WHERE (tag = 'sport' OR tag = 'leather')
GROUP BY item.id;
然后过滤掉那些没有所有必要标签的标签,但我宁愿让数据库完成工作,而不是获取不必要的项目然后迭代。
【问题讨论】:
标签: mysql many-to-many