我有一个表,其中存储了带有过滤器 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/