我有一个带ID /主题/定义列的数据库。当进行选择查询时,可能有数百个参数,我希望fetchall调用也返回任何不存在的行的主题,并带有默认文本(即“Not Found”)。
我意识到这可以在一个循环中完成,但是这会在每个周期查询数据库并且会有很大的性能损失。通过在单个select语句中通过“OR”连接的参数,搜索几乎是瞬时的。
有没有办法让SQLite中不存在的行的默认文本返回查询(主题)?
表结构(名为“词典”)
ID|Topic|Definition
1|wd1|def1
2|wd3|def3
示例查询
SELECT Topic,Definition FROM dictionary WHERE Topic = "wd1" or Topic = "wd2" or topic = "wd3"'
期望的回归
[(wd1, def1), (wd2, "Not Found"), (wd3, def3)]
答案 0 :(得分:0)
要从查询中获取wd2
之类的数据,这些数据必须首先出现在数据库中。
您可以将其放入临时表中,或使用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);