查找具有多个类别的产品

时间:2019-04-12 08:23:24

标签: sql-server

在经典的规范化方法中,我具有表“产品”,“类别”和外键“ ProductsToCategories”的关系表。

在我的应用程序中,您可以选择带有下拉列表的类别,但是我想切换到单选按钮,用户可以在其中选择多个类别。

如何实现查询以仅在关系表中查找几个实体匹配的产品?

伪代码:从Products内部联接中选择*,到ProductsToCategories ...,其中Category-ID = 35 AND Category-ID = 36 AND Category-ID = 9

1 个答案:

答案 0 :(得分:2)

一个简单的选项使用聚合:

SELECT
    p.id,
    p.name
FROM Products p
INNER JOIN ProductsToCategories pc
    ON p.id = pc.product_id
WHERE
    pc.category_id IN (9, 35, 36)
GROUP BY
    p.id,
    p.name
HAVING
    COUNT(DISTINCT pc.category_id) = 3;

这里的基本思想是按每种产品进行汇总,首先删除除属于感兴趣的三类的记录以外的所有记录。然后,我们断言剩下的是三个不同的类别,这意味着该产品是匹配项。