在经典的规范化方法中,我具有表“产品”,“类别”和外键“ ProductsToCategories”的关系表。
在我的应用程序中,您可以选择带有下拉列表的类别,但是我想切换到单选按钮,用户可以在其中选择多个类别。
如何实现查询以仅在关系表中查找几个实体匹配的产品?
伪代码:从Products内部联接中选择*,到ProductsToCategories ...,其中Category-ID = 35 AND Category-ID = 36 AND Category-ID = 9
答案 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;
这里的基本思想是按每种产品进行汇总,首先删除除属于感兴趣的三类的记录以外的所有记录。然后,我们断言剩下的是三个不同的类别,这意味着该产品是匹配项。