2010-07-28 5 views
1

J'ai une base de données sqlite avec trois tables: Notes, Listes et Notes-dans-listes.Nombre d'associations dans la requête de base de données sqlite?

Les notes et les listes ont une colonne d'identificateur autogénérée et des colonnes de données supplémentaires, telles que le titre. Notes-in-Lists est une table d'association avec un autokey, et deux clés étrangères qui pointent vers un id de note et un id de liste.

J'ai une requête qui renvoie toutes les notes dans une liste donnée:

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

Ce renverrait tous les titres de notes et ids de la liste 2 par exemple. Cependant, les notes peuvent figurer dans plusieurs listes et je dois être en mesure de dire si une note est associée à plusieurs listes. Cela est indiqué par les mêmes Notes_in_Lists.note_id répertoriées plusieurs fois dans la table Notes_in_Lists.

assez facile à faire par lui-même:

Select Count(note_id) From Notes_in_Lists Where note_id=2 

Mais je dois combiner les deux requêtes ci-dessus dans une requête et je n'ai pas idée par où commencer.

Modifier
Données d'échantillons

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 

de sortie de l'échantillon (requête pour le contenu de la liste 2):

_id title  numberOfLists 
1 "Note 1" 2 
2 "Note 2" 1 
4 "Note 4" 3 
+0

Veuillez fournir un exemple de sortie attendue. –

+0

Je pense que l'exemple de sortie pourrait être trompeur, car aucun "Note 4" n'est dans la liste 2. – MPelletier

+0

Merci, raté ça. Édité – CodeFusionMobile

Répondre

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 
+0

Cela renverra également la note 3 dans les résultats. J'ai besoin d'exclure les notes qui ne sont pas associées à la liste 2 – CodeFusionMobile

+0

@CodeFusionMobile - J'ai mis à jour la requête –

1
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; 

Il peut sembler inutile de faire deux jointures mais c'est ce dont tu as besoin exécuter deux requêtes.

+0

Cool. Je ne savais pas que tu pourrais rejoindre la même table deux fois. Je vais l'essayer – CodeFusionMobile

+0

Comme pour faire deux jointures, c'est nécessaire. Je travaille dans Android, et une lecture flash pour obtenir la base de données deux fois pour deux requêtes serait probablement plus lent que d'exécuter une requête un peu plus complexe une fois. – CodeFusionMobile

+0

Aye, sans parler des tracas de réassembler les résultats après :) – MPelletier

Questions connexes