我有三个表如下:
产品
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)
有人可以给我一个帮助吗?
答案 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