FTS4 モジュールを使用して生成された SQLite テーブルがあります。各エントリは、異なる言語で少なくとも 2 回リストされていますが、一意の ID を共有しています (int 列、インデックス化されていません)。これが私がやりたいことです: 優先言語で用語を検索したい. 結果を、別の言語を使用して同じ用語のルックアップと結合したいと考えています。ただし、2 回目の検索では、最初の検索で既に見つかった (ID で識別される) すべてのエントリを無視したいと考えています。だから基本的に私はこれをしたい:
WITH term_search1 AS (
SELECT *
FROM myFts
WHERE myFts MATCH 'term'
AND languageId = 1)
SELECT *
FROM term_search1
UNION
SELECT *
FROM myFts
WHERE myFts MATCH 'term'
AND languageId = 2
AND id NOT IN (SELECT id FROM term_search1)
ここでの問題は、term_seach1 クエリが 2 回実行されることです。私の結果を具体化する方法はありますか?(3 ではなく) 2 つのクエリに制限するための解決策は素晴らしいでしょう。
また、次のような再帰クエリを使用してみました。
WITH RECURSIVE term_search1 AS (
SELECT *
FROM myFts
WHERE myFts MATCH 'term'
AND languageId = 1
UNION ALL
SELECT m.*
FROM myFts m LEFT OUTER JOIN term_search1 t ON (m.id = t.id)
WHERE myFts MATCH 'term'
AND m.languageId = 2
AND t.id IS NULL
)
SELECT * FROM term_search1
これもうまくいきませんでした。どうやら、彼は languageId = 2 に対して 2 つのルックアップを実行したようです (これはおそらくバグですか?)。
前もって感謝します :)