Существует 4 таблицы.
- Snapmails
- Пользователь
- Snapmail камеры
когда пользователь добавляет Snapmail, допустим, что идентификатор пользователя равен 41
, а созданный Snapmail имеет id
из 1. Он создал Snapmail для 5 камер, и они имеют идентификаторы как1, 2, 3, 4, 5
теперь snapmail в БД будет выглядеть как
ID | user_id |
1 | 41 |
, а snapmail_cameras будет иметь
ID | camera_id | snapmail_id
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 4 | 1
5 | 5 | 1
Я пытаюсь получить всеsnapmails, который довольно прост, select * from snapmails
, но я хочу, чтобы в нем было еще 2 элемента.
Имя пользователя и Имя камеры.
Я пробовал это.
SELECT sm.*, u.firstname || ' ' || u.lastname as fullname,cam.name
FROM snapmails as sm
INNER JOIN users as u ON sm.user_id = u.id
LEFT JOIN snapmail_cameras as sc ON sm.id = sc.snapmail_id
LEFT JOIN cameras as cam ON sc.camera_id = cam.id
Это дает мне то, что я хочу, но по-другому.Я хочу получить снимок из базы данных, такой как
ID | fullname | camera_names
1 | Junaid F.| Camera1, Camera2, Camera3
, но мой запрос дает мне как
ID | fullname | camera_name
1 | Junaid F.| Camera1
1 | Junaid F.| Camera2
1 | Junaid F.| Camera3
1 | Junaid F.| Camera4
1 | Junaid F.| Camera5
таблица камеры имеет столбец name
, а таблица пользователя имеет 2 столбца firstname
и lastname
.Мой запрос дает мне все результаты, кроме одной строки для каждой камеры, но я хочу иметь одну строку со всеми названиями камер.это возможно?
ОБНОВЛЕНИЕ: я работаю в Ecto
Можно ли обернуть это все в Ecto Query?