gpt4 book ai didi

MySQL:具有多个 AND 条件的多对多关系

转载 作者:行者123 更新时间:2023-11-29 05:53:11 26 4
gpt4 key购买 nike

我的 MySQL 数据库中有一个多对多关系,其中包含三个表,如下所示:

表项,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;

然后过滤掉那些没有所有必要标签的标签,但我宁愿让数据库来完成这项工作,而不是获取不必要的项目然后进行迭代。

最佳答案

您可以稍微改变当前的查询以获得您想要的结果:

SELECT i.id, i.name    -- OK to select name assuming id is the PK
FROM item i
LEFT JOIN relation r
ON i.id = r.item_id
LEFT JOIN tag t
ON t.id = r.tag_id
WHERE t.tag IN ('sport', 'leather')
GROUP BY i.id
HAVING COUNT(DISTINCT t.tag) = 2;

这将返回所有同时具有 sportleather 标签的商品。它的工作原理是按项目聚合(就像您已经在做的那样),然后在 HAVING 子句中断言有两个不同的匹配标签。由于我们在 WHERE 子句中仅限制这两个标记,因此如果聚合后 HAVING 检查通过,则意味着该项目是匹配的。

关于MySQL:具有多个 AND 条件的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52290036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com