我认为我的数据库问题源于不知道正确的术语来帮助我自己找到答案,所以我会解释一下我正在做的通用版本,希望你可以用我的方式指出一些教程或给我一些要检查的条款。
让我们使用员工目录的示例。
每个员工可以有多个地点,多个工作职责,从单独的表中提取。示例表&一些数据,让我们只关注多个位置。
员工
主要员工数据
- id(例如:400)
- 首先(例如:约翰)
- 最后(例如:Doe)
的地点
唯一的地点列表
- id(例如:3000)
- title(例如:FakeCo,LLC)
map_employees_locations
将任意数量的地点与员工联系起来
- id
- employee_id(例如:400)
- location_id(例如:3000)
我正在努力解决单个查询如何返回这样的逻辑:
约翰
母鹿
FakeCo,LLC
AnotherCo,LLC
似乎我必须运行查询来获取员工数据,然后在嵌套查询中,获取与员工ID相关联的位置等等...如果每个员工只有一个位置,那么这将是一个简单的连接,我只是不知道如何处理倍数
让我知道如果我离开,我只是在苦苦挣扎
答案 0 :(得分:1)
您可以像这样加入所有表格
select e.id,e.first,e.last,l.id,l.title
from employees e
inner join map_employees_locations el
on el.employee_id = e.id
inner join locations l
on el.location_id = l.id
where e.first = 'John'
AND e.last = 'Doe'
这将返回如下数据:
e.id e.first e.last l.id l.title
------------------------------------------------
1 John Doe 1 FakeCo, LLC
1 John Doe 2 AnotherCo, LLC
答案 1 :(得分:0)
如果每个员工只需要一行,则应该使用group_concat
select id, e.last, e.first
group_concat(l.title separator ',' ) as locations
from employee e
join location l on l.employee_id = e.id
group by e.id
不确定语法cos我更了解postgres,但这应该可以胜任。