добавление результатов двух запросов SQlite - PullRequest
0 голосов
/ 22 мая 2011

Я хочу добавить результаты двух отдельных подсчетов 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
)

Но не слишком ли это малоэффективно?Это называется довольно часто и может мешать плавности пользовательского интерфейса.

Спасибо.

[ПРАВИТЬ] Что я на самом деле пытаюсь сделать:

Я делаюприложение, чтобы помочь изучению словарного запаса.В таблице entries хранятся «статические» данные о типе слова, определении и т. Д. В таблице scores хранится информация о том, насколько хорошо вы выучили слова (например, производительность, запланированное время следующего просмотра)

Комупроверьте количество оставшихся слов для изучения / просмотра, я подсчитываю, сколько слов еще не существует в таблице scores (т. е. никогда не трогали) или когда накопленный балл довольно низок (т. е. нуждается в рецензировании).

Причина, по которой я не объединяю эти 2 таблицы в 1 (что сделало бы мою жизнь намного проще), заключается в том, что иногда мне нужно обновить таблицу entries либо путем добавления новых слов, либо удаления нескольких слов, либо обновления их содержимого.и я не нашел простого способа сделать это .Если я просто сделаю INSERT OR REPLACE, я потеряю информацию о результатах.

1 Ответ

2 голосов
/ 22 мая 2011

Я думаю, вы ищете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...