1

我有一个带有 2 个表的 SQLite 数据库。

第一个称为 WORDS,其行看起来像: (id, word)

第二个称为 WORDS2SECTION,其行看起来像: (id, sectionid)

书中的每个单词都列在 WORDS 中,并有一个对应的 id。第二个表是一堆将每个 id(象征一个词)连接到书的特定部分的行。

我希望能够输入一堆不同的单词并找到包含所有这些单词的 sectionid 编号。

如果只有一个词,那我很好:

SELECT sectionid JOIN WORDS WHERE word = '%hello%'

我的问题是,如何扩展它以找到包含所有输入单词列表的 sectionid。

我试过这个:

SELECT sectionid JOIN WORDS ON WORDS.id = WORDS2SECTION.id WHERE word = '%hello%' IN (SELECT sectionid JOIN WORDS ON WORDS.id = WORDS2SECTION.id WHERE word = '%word2%')

但这似乎不起作用。有任何想法吗?我已经搜索了一段时间试图找到解决方案,但我还没有找到。不过,我承认我是 SQL 的新手。

4

2 回答 2

0
select sectionid
  from WORDS2SECTION
 where id in (select id 
                       from WORDS
                      where word like '%hellow%');
于 2012-07-24T04:25:58.830 回答
0

分组方式sectionid

select sectionid, count(sectionid)
from WORDS2SECTION
where id in (select id
    from WORDS
    where word in ('hello', 'foo', 'bar')
)
group by sectionid

如果计数与单词数相同,则您的命中率很高。如果数字较低,则找到了一些单词。这样,您就可以对结果进行加权。

使用having count(sectionid) > X,您可以将结果限制为匹配至少 X 个匹配项的结果。

使用order by count(sectionid) desc将首先为您提供最佳匹配。

于 2012-07-24T13:11:49.410 回答