SQL使产品具有与其他产品相同的更多属性

时间:2011-09-04 22:09:16

标签: mysql database

我有三个表如下:

产品

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与产品2共享属性4和5,但仅与产品1共享属性5)

有人可以给我一个帮助吗?

1 个答案:

答案 0 :(得分: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