我正在尝试编写一个存储过程,它可以接收k个单词并返回包含k个单词的答案。
字表
单词
字ID
描述词倒排索引
描述ID
字ID
计数
那么,给定k个单词,我如何有效地获取包含所有k个单词的所有descriptionIDs?

最佳答案

在单个查询中,最简单的方法是使用INHAVING子句的组合。例子:

  SELECT dwi.descriptionid
    FROM DESCRIPTION_WORD_INDEX dwi
    JOIN WORD w ON w.wordid = dwi.wordid
   WHERE w.word IN ('a', 'b', 'c')
GROUP BY dwi.descriptionid
  HAVING COUNT(DISTINCT w.word) = 3

IN子句中的值数目必须与HAVING子句中计算的不同值数目相匹配。
另一种方法是为每个特定单词连接单词表的多个副本(在本例中):
  SELECT dwi.descriptionid
    FROM DESCRIPTION_WORD_INDEX dwi
    JOIN WORD a ON a.wordid = dwi.wordid
               AND a.word = 'a'
    JOIN WORD b ON b.wordid = dwi.wordid
               AND b.word = 'b'
    JOIN WORD c ON c.wordid = dwi.wordid
               AND c.word = 'c'

关于sql - K-词搜索SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4114791/

10-12 03:06