添加两个SQlite查询的结果

时间:2011-05-22 09:15:09

标签: android performance sqlite

我想添加两个单独的计数SQlite查询的结果。假设我有2个名为entriesscores的表并且有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,我将丢失有关分数的信息。

1 个答案:

答案 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