我正面临着一个难题;不知道为什么 - 是因为这么晚,还是我被困住了。我的目标是在网页上创建一个过滤器,所以我试图解决这个问题。
我在参考表product_filter
中列出了我使用过滤器存储的产品。
结构:
id | product_id | filter1_id | filter2_id
1 | 1 | 2 | 1 <---
2 | 1 | 4 | 3
3 | 1 | 5 | 1
4 | 2 | 2 | 1 <---
5 | 2 | 3 | 1
6 | 3 | 2 | 1 <---
7 | 3 | 3 | 4
我需要提交产品列表(例如1,2,3)并仅获取那些过滤器组合,这些组合对于所有选定的产品ID都是相同的。所以结果必须是
filter1_id | filter2_id
2 | 1
我的问题是我的产品可能会有所不同而且我无法进行大量的自我内联......所以我被卡住了......有什么建议吗?
答案 0 :(得分:0)
您可以尝试以下方法:
select filter1_id, filter2_id
from product_filter
group by filter1_id, filter2_id
having count(*)=(
select count(distinct product_id)
from product_filter
)
只有当每个 product_id存在filter1_id和filter2_id的组合时,才会返回列表。 (Fiddle here.)这就是你所追求的吗?如果没有任何组合存在于所有给定的product_id中,您是否未提及应返回的内容 - 空结果集?
这不是自我加入(或者甚至是大量的加入;))但是我想象的它仍然相当昂贵。