我有一个包含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的新手。
答案 0 :(得分:0)
select sectionid
from WORDS2SECTION
where id in (select id
from WORDS
where word like '%hellow%');
答案 1 :(得分: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
将首先为您提供最佳匹配。