У меня есть три таблицы в БД PostgreSQL: пользователи, действия, места.
Users:
- id
- name
Visits:
- id
- user_id
- location_id
Venues:
- id
- name
Я хочу получить все действия для конкретного пользователя, событие, если пользователь еще не посещал какое-либо место. Я пробовал это с некоторыми объединениями:
SELECT venues.id as venue, COUNT(activities.id) as visits
FROM users
RIGHT OUTER JOIN activities ON users.id=activities.user_id
RIGHT OUTER JOIN venues ON activities.venue_id=venues.id
WHERE users.id=1234
GROUP BY venues.id
ORDER BY venues.id
Я хочу, чтобы переменная посещения содержала 0, когда пользователь не посещал местоположение (= нет записей в действиях), и количество действий, если пользователь посетил местоположение.
Но я получаю только те места, которые посетил пользователь:
venue | visits
1 3
2 4
3 22
4 1
Я думал, что RIGHT OUTER JOIN
вернет все записи с правой стороны, но это не так.