我有一个包含三个表的sqlite数据库:Notes,Lists和Notes-in-Lists。
Notes和Lists都有一个自动生成的id列和一些额外的数据列,如title。 Notes-in-Lists是一个带有自动键的关联表,以及两个指向Note id和List id的外键。
我有一个返回给定列表中所有注释的查询:
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中的所有音符标题和ID。
但是,笔记可以在多个列表中,我需要能够判断一个笔记是否与多个列表相关联。这由Notes_in_Lists表中多次列出的相同Notes_in_Lists.note_id表示。
自己很容易做到:
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
答案 0 :(得分:2)
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;
进行两次连接似乎很浪费,但这就是基本上运行两个查询所需要的。
答案 1 :(得分:0)
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