K - 单词搜索SQL

时间:2010-11-06 19:30:15

标签: sql mysql

我正在尝试编写一个存储过程,该过程可以接收k个单词并返回包含k个单词的答案。

单词表

  • 的wordID

描述词倒排索引

  • descriptionID
  • wordID
  • 计数

那么 - 给定k个单词,我如何有效地获得包含所有k个单词的所有descriptionID

1 个答案:

答案 0 :(得分:1)

单个查询中最简单的方法是使用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子句中计算的不同值的数量相匹配。

另一种方法是为每个特定单词加入WORD表的多个副本(在本例中):

  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'