我正在尝试编写一个存储过程,它可以接收k个单词并返回包含k个单词的答案。
字表
单词
字ID
描述词倒排索引
描述ID
字ID
计数
那么,给定k个单词,我如何有效地获取包含所有k个单词的所有descriptionID
s?
最佳答案
在单个查询中,最简单的方法是使用IN
和HAVING
子句的组合。例子:
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/