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

  • 本文关键字:过滤 一列 何按多 mysql sql
  • 更新时间 :
  • 英文 :


经过多次尝试,我都无法解决这个问题,所以我决定与你分享,看看你是否能帮助我。

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

我有两张桌子,产品和products_categories。

+------------------+ |    产品 | +-------+----------+ |pr_id |pr_title | +-------+----------+ |1 |苹果手机 | +-------+----------+ |2 |三星 | +-------+----------+ |3 |小米 | +-------+----------+
+--------------------------+ |   产品分类 | +------------+-------------+ |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 和三星。

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

我该如何解决这个问题?

使用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
)

你可以尝试使用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)

最新更新