我有一个表,其中存储了带有过滤器 ID 的产品 ID。映射是一对多的。 (一个产品可以与多个过滤器相关联)。现在我需要获取匹配 所有 条件的记录。例如,我需要获取具有 FILTERS 1,5 和 7 的产品。我想要像映射到 1 AND 5 AND 7 的产品一样完全匹配。

下面是表结构

CREATE TABLE IF NOT EXISTS `product_to_filter` (
  `product_id` int(11) NOT NULL,
  `filter_id` int(11) NOT NULL,
  PRIMARY KEY (`product_id`,`filter_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我已经尝试过下面提到的查询,但它没有得到我想要的结果。
select distinct p1.product_id, p1.filter_id from product_to_filter p1
join product_to_filter p2 on 1=1
join product_to_filter p3 on 1=1
where
p1.filter_id=1 AND p2.filter_id=5 AND p3.filter_id=7

请帮助我解决这个问题

最佳答案

可能有更好的方法来做到这一点,你也可以使用下面的脚本

SELECT distinct p1.product_id
FROM product_to_filter p1
WHERE EXISTS(SELECT 1 from product_to_filter p2 WHERE p1.product_id=p2.product_id AND p2.filter_id=2)
AND EXISTS(SELECT 1 from product_to_filter p3 WHERE p1.product_id=p3.product_id AND p3.filter_id=5)
AND EXISTS(SELECT 1 from product_to_filter p4 WHERE p1.product_id=p4.product_id AND p4.filter_id=7)

关于连接和过滤器的 Mysql 查询问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39203209/

10-13 02:03