我有一张表产品。
产品通过 product_features 有许多功能。
我想要返回所有,仅具有功能1和功能2的产品,因此典型的LEFT JOIN在这种情况下不起作用 - 因为这会返回 功能1或功能2的<产品。
有人能指出我正确的方向吗?
答案 0 :(得分:1)
您可以使用内部联接,分组依据和
select p.* from products as p
inner join product_features as pf on pf.product_id = p.id
inner join features as f on f.id = pf.feature_id
where f.feature_id in ('feature1', 'feature2')
group by product
having count(*) =2;
答案基于以下事实:集合中的特征只出现一次
答案 1 :(得分:0)
通过OLAP功能,您可以实现此目的。 以下查询计算每个产品的不同功能。它返回所有具有两个功能的产品。
select pid, pname, fid
from (
select t1.pid, t1.pname,t2.fid,count(distinct fid) over(partition by t1.pid, t1.pname) cnt from
products t1 left join product_features t2
on t1.pid = t2.pid
) a
where cnt = 2
order by 1,2,3