У меня есть 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
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
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;
Выполнение двух соединений может показаться расточительным, но это то, что вам нужно для выполнения двух запросов.