我在选择产品类型的实体时遇到了问题,因为产品有两个或多个类别。
我有以下表格:
product
============
product_id (PK)
name
category
============
category_id (PK)
name
以及它们之间的关联:
product_category
============
product_id (PFK)
category_id (PFK)
现在的问题是,我不能使用product_category表根据多个类别来选择产品。
例如:我想选择类别1和类别2的所有产品,这意味着表product_category中有两个匹配项。
要选择具有单个类别的所有产品,可以使用以下select
SELECT p.*
FROM product p
JOIN product_category pc using(product_id)
WHERE category_id = 1;
但是如何选择产品具有category_id 1和2的位置呢?查询应该只返回这两个类别都关联的产品。
WHERE category_id = 1 and category_id = 2;
这显然是不可能的匹配,但是我如何解决这个问题呢?这有可能吗?
发布于 2019-04-25 06:08:14
加入一个派生表,在该派生表中,您可以筛选出属于所需类别之一的所有关联。然后按产品分组并使用HAVING
子句,该子句检查类别的不同计数是否等于所需类别的数量。拥有所有想要的类别的产品将满足这一要求。
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;
https://stackoverflow.com/questions/55838971
复制相似问题