【问题标题】:Select entities using multiple criteria from many-to-many association entity从多对多关联实体中使用多个条件选择实体
【发布时间】:2023-03-22 09:16:01
【问题描述】:

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

我有以下表格:

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;

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

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

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

    【讨论】:

    • 谢谢!解决了这个问题,但是我在 WHERE 子句中使用了内部选择,例如 (SELECT...) 中的 WHERE product_id。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多