首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从多对多关联实体中使用多个条件选择实体

从多对多关联实体中使用多个条件选择实体
EN

Stack Overflow用户
提问于 2019-04-25 05:41:43
回答 1查看 50关注 0票数 0

我在选择产品类型的实体时遇到了问题,因为产品有两个或多个类别。

我有以下表格:

代码语言:javascript
复制
product
============
product_id (PK)
name

category
============
category_id (PK)
name

以及它们之间的关联:

代码语言:javascript
复制
product_category
============
product_id (PFK)
category_id (PFK)

现在的问题是,我不能使用product_category表根据多个类别来选择产品。

例如:我想选择类别1和类别2的所有产品,这意味着表product_category中有两个匹配项。

要选择具有单个类别的所有产品,可以使用以下select

代码语言:javascript
复制
SELECT p.*
FROM product p
JOIN product_category pc using(product_id)
WHERE category_id = 1;

但是如何选择产品具有category_id 1和2的位置呢?查询应该只返回这两个类别都关联的产品。

代码语言:javascript
复制
WHERE category_id = 1 and category_id = 2;

这显然是不可能的匹配,但是我如何解决这个问题呢?这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-25 06:08:14

加入一个派生表,在该派生表中,您可以筛选出属于所需类别之一的所有关联。然后按产品分组并使用HAVING子句,该子句检查类别的不同计数是否等于所需类别的数量。拥有所有想要的类别的产品将满足这一要求。

代码语言:javascript
复制
SELECT p.*
       FROM product p
            INNER JOIN (SELECT pc.product_id
                               FROM product_category pc
                               WHERE pc.category_id IN (1, 2)
                               GROUP BY pc.product_id
                               HAVING count(DISTINCT pc.category_id) = 2)
                       ON pc.product_id = p.product_id;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55838971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档