Ассоциации количества в sqlite запросе базы данных?

У меня есть sqlite база данных с тремя таблицами: Примечания, Списки и Примечания в списках.

И Примечания и Списки имеют автоматически сгенерированный идентификационный столбец и некоторые дополнительные столбцы данных как заголовок. Примечания в списках являются таблицей ассоциации с автоключом и двумя внешними ключами, которые указывают на идентификатор Примечания и идентификатор Списка.

У меня есть запрос, который возвращает все примечания в данном списке:

Select _id, title From Notes
Join Notes_in_Lists On Notes._id=Notes_in_Lists.note_id
Where Notes_in_Lists.list_id=2

Это возвратило бы все заголовки примечания и идентификаторы из Списка 2, например.

Однако примечания могут быть в нескольких списках, и я должен смочь сказать, связано ли примечание с несколькими списками. Это обозначается тем же Notes_in_Lists.note_id, перечисляемым многократно в таблице Notes_in_Lists.

Достаточно легкий сделать отдельно:

Select Count(note_id) From Notes_in_Lists Where note_id=2

Но я должен объединить два запроса выше в один запрос, и у меня нет идеи, где начать.

Править
Демонстрационные данные

Notes:  
_id title  
1   "Note 1"
2   "Note 2" 
3   "Note 3"   
4   "Note 4" 

Note_in_Lists
_id note_id list_id  
1   1       2  
2   1       3  
3   2       2  
4   3       1   
5   4       2  
6   4       4
7   4       5  

Демонстрационный вывод (запрашивают для содержания списка 2):

_id  title      numberOfLists
1    "Note 1"   2
2    "Note 2"   1
4    "Note 4"   3
1
задан CodeFusionMobile 29 July 2010 в 14:09
поделиться

2 ответа

SELECT n._ID, Title, Count(*) numberOfLists
FROM Notes n, Notes_In_Lists l
where n._id = l.note_id
  AND NOT EXISTS (Select 1 
              from notes_in_lists l2 where 
              l2.note_Id = n._id
              AND l._Id = 2)
group by n._ID, n.Title
0
ответ дан 2 September 2019 в 22:39
поделиться
Select Notes._id, Notes.title, Count(Nil2.list_id)
From Notes
Inner Join Notes_in_Lists NiL1 On Notes._id=NiL1.note_id
Inner Join Notes_in_Lists NiL2 On Notes._id=NiL2.note_id
Where NiL1.list_id=2
Group By Notes._id, Notes.title;

Выполнение двух соединений может показаться расточительным, но это то, что вам нужно для выполнения двух запросов.

2
ответ дан 2 September 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: