Запрос, основанный на разнице в количестве вхождений в другие таблицы

#android #sqlite #android-sqlite

#Android #sqlite #android-sqlite

Вопрос:

У меня есть 3 таблицы.

 table_main:

     ----- ---------- ------------- 
    | _id | ENTRY_ID |   DATA      |
     ----- ---------- ------------- 
    |   1 | a1       | some data 1 |
    |   2 | a2       | some data 2 |
    |   3 | a3       | some data 3 |
     ----- ---------- ------------- 
 

table_additions:

  ---------- ----------- 
| ENTRY_ID | TIMESTAMP |
 ---------- ----------- 
| a1       |    123456 |
| a2       |    123458 |
| a1       |    123654 |
| a1       |    123658 |
| a2       |    123843 |
| a3       |    123911 |
 ---------- ----------- 
 

table_deletions:

  ---------- ----------- 
| ENTRY_ID | TIMESTAMP |
 ---------- ----------- 
| a3       |    123556 |
| a2       |    123558 |
| a3       |    123754 |
| a1       |    123858 |
| a3       |    123863 |
| a3       |    123976 |
 ---------- ----------- 
 

Я работаю в Android. Я хочу получить данные из table_main всех записей, которые имеют :

количество вхождений в table_additions > количество вхождений в table_deletions

Итак, в приведенном выше примере вывод должен быть:

  ----- ---------- ------------- 
| _id | ENTRY_ID |   DATA      |
 ----- ---------- ------------- 
|   1 | a1       | some data 1 |
|   2 | a2       | some data 2 |
 ----- ---------- ------------- 
 

Ответ №1:

Это можно сделать с помощью коррелированных подзапросов:

 SELECT *
FROM table_main
WHERE (SELECT COUNT(*)
       FROM table_additions
       WHERE entry_id = table_main.entry_id
      ) >
      (SELECT COUNT(*)
       FROM table_deletions
       WHERE entry_id = table_main.entry_id
      )