gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:45:00 25 4
gpt4 key购买 nike

我在选择“产品”类型的实体时遇到问题,其中产品有两个或多个类别。

我有以下表格:

product
============
product_id (PK)
name

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

及其关联:

product_category
============
product_id (PFK)
category_id (PFK)

现在的问题是,我无法使用product_category表根据多个category.category_id选择产品。

例如:我想选择所有类别为1、2的产品,这意味着表product_category中有两次出现。

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

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;

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

最佳答案

连接一个派生表,您可以在其中过滤属于任一所需类别的所有关联。然后按产品分组并使用 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;

关于mysql - 使用多个条件从多对多关联实体中选择实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55838971/

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