2011-09-04 129 views
1

我有三个表像如下:SQL获得具有更多的共同属性的产品与其他产品

产品

id | name 
1 | name1 
2 | name2 
3 | name3 

属性

id | name  
1 |  attr1 
2 |  attr2 
3 |  attr3 
4 |  attr4 
5 |  attr5 
6 |  attr6 
7 |  attr7 

attr_rel使农资和属性之间的关系

attr_id | prod_id 
    1  |  1 
    1  |  2 
    2  |  1 
    2  |  2 
    3  |  3 
    4  |  2 
    4  |  3 
    5  |  1 
    5  |  2 
    5  |  3 

我想要的是执行一个查询,该查询返回按照与给定产品共有的属性数量排序的所有产品。

例如:对于产品3查询应该返回类似

id | name  | num_attr_in_common 
2  | product2 |    2 
1  | product1 |    1 

(由于产品3股属性4和5的产品2,但只有产品1份额属性5)

谁能给我请帮忙?

回答

1
select a1.prod_id,p.name,count(*) as num_attr_in_common 
from attr_rel as a1 
inner join (
select attr_id 
from attr_rel 
where prod_id = 3) as a2 
on a1.attr_id = a2.attr_id and a1.prod_id <> 3 
inner join products as p on p.id = a1.prod_id 
group by a1.prod_id 
order by num_attr_in_common desc 
+0

对!谢谢! – jribeiro

相关问题