在sqlite数据库查询中计算关联?

时间:2010-07-28 17:43:22

标签: sql database sqlite

我有一个包含三个表的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

2 个答案:

答案 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