2016-08-15 4 views
0

ID /トピック/定義の列を持つDBがあります。おそらく何百ものパラメータを持つselectクエリが作成されると、fetchall呼び出しで、存在しない行のトピックをデフォルトのテキスト(つまり、「見つからない」)で返すようにしたいと思います。Python SQLite非存在行のデフォルト文字列を返す

私はこれがループで実行できることを認識していますが、それは毎回DBにクエリを実行し、パフォーマンスが大幅に低下します。単一のselectステートメントで "OR"で結合されたパラメータでは、検索はほぼ瞬時に行われます。

SQLiteに存在しない行のデフォルトテキストを使ってクエリ(トピック)を返す方法はありますか?

テーブル構造(名前は "辞書")

ID|Topic|Definition 
1|wd1|def1 
2|wd3|def3 

サンプルクエリは、そのようなデータがなければならない、クエリのうち、wd2のようなデータを取得するに戻り

[(wd1, def1), (wd2, "Not Found"), (wd3, def3)] 
+0

@CLは、私は、テーブル構造、サンプルクエリ、および所望のリターンを加えました。それは非常に簡単で基本的です。 – Tim

答えて

0

を希望

SELECT Topic,Definition FROM dictionary WHERE Topic = "wd1" or Topic = "wd2" or topic = "wd3"' 

最初はデータベースにいなければなりません。 一時テーブルに入れるか、common table expressionを使用します。

outer join

を使用し、一致せずに行を含むように:

WITH IDs(ID) AS (VALUES ('wd1'), ('wd2'), ('wd3')) 
SELECT Topic, 
     IFNULL(Definition, 'Not Found') AS Definition 
FROM IDs 
LEFT JOIN dictionary USING (ID); 
関連する問題