1

2 つのテーブルを持つ SQLite データベースがあります。

最初のものは WORDS と呼ばれ、次のような行があります: (id, word)

2 つ目は WORDS2SECTION と呼ばれ、次のような行があります: (id, sectionid)

本のすべての単語は WORDS にリストされ、対応する ID を持っています。2 番目のテーブルは、各 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

グループ化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 に答える
0
select sectionid
  from WORDS2SECTION
 where id in (select id 
                       from WORDS
                      where word like '%hellow%');
于 2012-07-24T04:25:58.830 に答える