我想添加两个单独的计数SQlite查询的结果。假设我有2个名为entries
和scores
的表并且有2个查询:
SELECT COUNT(1) FROM entries WHERE
key NOT IN (SELECT key FROM scores)
SELECT COUNT(1) FROM scores WHERE
value <= threshold
也许我可以做这样的事情来得到他们的结果总和:
SELECT COUNT(1) from (
SELECT key FROM entries WHERE
key NOT IN (SELECT key FROM scores)
UNION ALL
SELECT key FROM scores WHERE
value <= threshold
)
但这有点太低效吗?这经常被调用,可能会干扰UI的流畅性。
谢谢。
[编辑]我实际上要做的事情:
我正在制作一个应用来帮助学习词汇。 entries
表保存有关单词类型,定义等的“静态”数据。scores
表保存有关您学习单词的信息(例如,表现,预定下次审核时间)
为了检查要学习/复习的剩余单词的数量,我计算scores
表中还没有多少单词(即从未触及)或累积分数相当低(即需要复习) )。
我没有将这两个表合并为1(这会让我的生活更轻松)的原因是因为有时我需要通过插入新单词,删除几个单词来更新entries
表,或者更新他们的内容,我还没有找到一个简单的方法to do that。如果我只是做INSERT OR REPLACE
,我将丢失有关分数的信息。
答案 0 :(得分:2)
我认为你正在寻找一个UNION。联合组合了两个查询的结果。试试这个(抱歉没有经过测试,我无法访问SQLite):
SELECT COUNT(1) FROM
(
SELECT 1
FROM entries
WHERE key NOT IN (SELECT key FROM scores)
UNION ALL
SELECT 1
FROM scores
WHERE scores.value <= threshold
)
在您的问题中阅读了解释您需要做什么的编辑后,我认为JOIN会更合适。这是一种将两个表组合成一个查询的方法。像这样:
SELECT COUNT(1)
FROM entries
LEFT JOIN score
ON score.key = entries.key
WHERE score.value <= threshold
OR score.key is null