查找多对多关系中具有最大共同关系数的行

时间:2014-11-18 13:43:25

标签: sql

我有一个games表,用于存储游戏详细信息(gameId, name, description),以及一个category表,其中包含两列catId, name和一个game_category表( id, game_id, category_id),它将每个游戏与其所属的类别联系起来。

表格中的关系是固定的,因此我希望根据特定游戏的共享类别数量找到相关游戏(最相似)。结果必须按更高的相似度排序

1 个答案:

答案 0 :(得分:1)

你可以做的是寻找与参考游戏有最大共同范围的其他游戏。为此,获取参考游戏的所有类别,并计算与其他游戏共享的类别数量。具有较多常见类别的那些应该是最相似的:

SELECT SimCG.gameId, COUNT(*) NumberOfSharedCategories
   -- count of categories of similar games
FROM dbo.CategoryGame AS RG
   -- table of reference game
INNER JOIN dbo.CategoryGame AS SimCG
   -- table of similar games
ON RG.categoryId = SimCG.categoryId 
   -- common categories shared by reference and similar games
WHERE 
   RG.gameId = 1 
       -- Id of the refenece game
   AND SimCG.gameId <> 1
       -- Exclude the reference game from the compared games
GROUP BY SimCG.gameId
   -- Group by similar game id

您可以轻松使用此基本查询加入游戏表,并按NumberOfSharedCategories列按降序排序。