我如何按多个值过滤一列(严格过滤器)?

时间:2019-10-11 08:16:22

标签: mysql sql

经过多次尝试,我仍无法解决此问题,因此,我决定与您分享它,看看您是否可以帮助我。

我已经创建了高级产品搜索,但是我无法根据所选类别过滤产品,我解释说:

我有两个表,products和products_categories。

+------------------+
|     Prodcuts     |
+-------+----------+
| pr_id | pr_title |
+-------+----------+
| 1     | Iphone   |
+-------+----------+
| 2     | Samsung  |
+-------+----------+
| 3     | Xiaomi   |
+-------+----------+
+--------------------------+
|    Products Categories   |
+------------+-------------+
| ct_product | ct_category |
+------------+-------------+
| 1          | 5           |
+------------+-------------+
| 1          | 7           |
+------------+-------------+
| 2          | 8           |
+------------+-------------+

我只想过滤具有所选类别的产品,例如,我的mysql查询是:

SELECT * products WHERE products.pr_id IN (SELECT ct_product FROM products_categories WHERE ct_category IN (5, 8, 7)

此查询的结果是Iphone和Samsung。

但是我想要的是,如果任何产品没有选择的3个类别都不显示任何东西,因为产品ID 1没有类别ID 8,反之亦然。

我该如何解决?

2 个答案:

答案 0 :(得分:2)

使用distinct count()

SELECT * products WHERE products.pr_id IN(
select ct_product
from products_categories
where  ct_category IN (5, 8, 7)
group by ct_product
having count(distinct ct_category)=3
)

答案 1 :(得分:0)

您可以尝试使用inner join

SELECT * products p
INNER JOIN products_categories pc on pc.ct_product = p.pr_id
WHERE pc.ct_category IN (5, 8, 7)