我正在尝试编写一个存储过程,该过程可以接收k个单词并返回包含k个单词的答案。
那么 - 给定k个单词,我如何有效地获得包含所有k个单词的所有descriptionID
?
答案 0 :(得分:1)
单个查询中最简单的方法是使用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
子句中计算的不同值的数量相匹配。
另一种方法是为每个特定单词加入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'