如何加入所有正确表必须设置的记录?

时间:2016-09-13 18:46:44

标签: mysql sql postgresql activerecord rails-activerecord

我有一张表产品

产品通过 product_features 有许多功能

我想要返回所有,具有功能1和功能2的产品,因此典型的LEFT JOIN在这种情况下不起作用 - 因为这会返回 功能1或功能2的<产品

有人能指出我正确的方向吗?

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