【发布时间】:2019-02-21 08:37:22
【问题描述】:
有 4 张桌子。
- 快照邮件
- 用户
- Snapmail 相机
- 相机
当用户添加 snapmail 时,假设用户的 id 是 41,他创建的 snapmail 的 id 为 1。他为 5 个摄像头创建了 snapmail,它们的 id 分别为 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
我正在尝试获取所有非常简单的快照邮件,
select * from snapmails 但我想在这里面多放两件东西。
用户名和相机名。
我试过了。
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,用户表有两列firstname和lastname。我的查询给了我所有结果,但每台摄像机只有一行,但我希望一行包含所有摄像机名称。这可能吗?
更新:
我在Ecto 工作,是否可以将这一切都包含在 Ecto Query 中?
【问题讨论】:
标签: database postgresql ecto