Comment puis-je atteindre ce double rejoindre en SQL?
J'ai cette requête, qui a rejoint les noms des événements qui sont stockées dans un cache de table.
SELECT OccurrenceCache.occurrence_date, CalendarItem.summary FROM OccurrenceCache
INNER JOIN CalendarItem ON CalendarItem.ROWID = OccurrenceCache.event_id
WHERE OccurrenceCache.occurrence_date >= (strftime('%s', 'now', 'localtime', 'start of day') - strftime('%s', '2001-01-01', 'start of day')) AND OccurrenceCache.occurrence_end_date <= (strftime('%s', 'now', 'localtime', 'start of day') - strftime('%s', '2001-01-01', 'start of day') + 24 * 60 * 60);
Maintenant, je veux inclure les données de localisation des événements, qui sont stockés dans une table nommée Emplacement. L'emplacement des entrées sont référencés par CalendarItem.location_id (0 signifie qu'aucun emplacement n'est spécifié). Je l'ai essayé avec un autre REJOIGNEZ-déclaration, mais il ne fonctionne pas:
SELECT OccurrenceCache.occurrence_date, CalendarItem.summary, Location.title FROM OccurrenceCache
INNER JOIN CalendarItem ON CalendarItem.ROWID = OccurrenceCache.event_id
INNER JOIN Location ON Location.ROWID = CalendarItem.location_id
WHERE OccurrenceCache.occurrence_date >= (strftime('%s', 'now', 'localtime', 'start of day') - strftime('%s', '2001-01-01', 'start of day')) AND OccurrenceCache.occurrence_end_date <= (strftime('%s', 'now', 'localtime', 'start of day') - strftime('%s', '2001-01-01', 'start of day') + 24 * 60 * 60);
Elle renvoie 0 résultats.
- Difficile à dire sans les données de l'échantillon, mais je devine: est-ce que chaque ligne dans OccurenceCache ont une entrée correspondante dans CalendarItem et de l'Endroit? Si non, utilisez "LEFT JOIN"au lieu de "INNER JOIN"s.
- Oui c'est résolu. Merci!
Vous devez vous connecter pour publier un commentaire.
Dans le cas où toutes les entrées dans le
Location
tableau ne correspondent pas à lacalenderitem
table, à l'aide deLEFT JOIN
au lieu de cela sera la solution.À l'aide de Jointures en SQL