2011-09-04 53 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