获取共享标签数量最多的相关产品

时间:2019-05-17 12:48:38

标签: sql-server database

我需要获取具有尽可能多标签数量的相关产品。
例如:
Prod1具有以下标签:tag1,tag2,tag3
Prod2具有以下标签:tag2,tag4,tag5
Prod3具有以下标签:tag2,tag3,tag5
Prod4具有以下标签:tag6,tag7,tag5

因此与Prod1最相关的产品如下
1- Prod3,因为它们与两个标签共享:tag2和tag3,
2-下一个相关产品是Prod2,因为它们与一个标签tag2共享

我的数据库架构如下:

CREATE TABLE Videos (VideoID INT PRIMARY KEY,
                     VideoTitle VARCHAR(80));

CREATE TABLE Tags (TagID INT PRIMARY KEY,
                   TagText VARCHAR(20));

CREATE TABLE VideosTags (VideoID FOREIGN KEY REFERENCES Videos,
                         TagID FOREIGN KEY REFERENCES Tags,
                         PRIMARY KEY (VideoId, TagId));

1 个答案:

答案 0 :(得分:1)

如果您希望对VideoID = 1111进行搜索,则:

select
  videoid, count(*) counter
from VideosTags
where 
  videoid <> 1111
  and
  tagid in (select tagid from VideosTags where videoid = 1111)
group by videoid
order by counter desc

这将首先对具有最常用标签的产品进行排序。