MySQL关系数据库查询,术语正确吗?

MySQL关系数据库查询,术语正确吗?,mysql,database,relational-database,Mysql,Database,Relational Database,我认为我对数据库的问题源于不知道正确的术语来帮助我自己找到答案,所以我将解释我正在做的事情的一般版本,希望你能为我指出一些教程或者给我一些术语来检查 让我们使用一个雇员目录的示例 每个员工可以有多个位置、多个工作职责,这些职责来自一个单独的表。示例表和一些数据,让我们只关注多个位置 员工 主要员工数据 -id(ex:400) -第一(例如:约翰) -最后(例如:能源部) 位置 位置的唯一列表 -id(ex:3000) -标题(例如:FakeCo,LLC) 映射员工位置 将任意数量的位置绑定到员

我认为我对数据库的问题源于不知道正确的术语来帮助我自己找到答案,所以我将解释我正在做的事情的一般版本,希望你能为我指出一些教程或者给我一些术语来检查

让我们使用一个雇员目录的示例

每个员工可以有多个位置、多个工作职责,这些职责来自一个单独的表。示例表和一些数据,让我们只关注多个位置

员工
主要员工数据
-id(ex:400)
-第一(例如:约翰)
-最后(例如:能源部)

位置
位置的唯一列表
-id(ex:3000)
-标题(例如:FakeCo,LLC)

映射员工位置
将任意数量的位置绑定到员工
-id
-员工id(ex:400)
-位置标识(ex:3000)

我正在苦苦思索一个查询如何返回如下内容的逻辑:

约翰
能源部
法科有限责任公司
AnotherCo有限责任公司

似乎我必须运行一个查询来获取员工数据,然后在一个嵌套查询中,获取与员工id关联的位置,等等。。。如果每个员工只有一个位置,那将是一个简单的连接,我只是不知道如何处理倍数。

如果我离目标很远,请告诉我,我只是在挣扎。


您可以像这样将所有表连接在一起

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

你会像这样把所有的表连接在一起

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

如果您希望每个员工只有一行,您可能应该使用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

不确定语法,因为我更了解postgres,但这应该可以完成这项工作。

如果您希望每个员工只使用一行,您可能应该使用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

不确定语法,因为我更了解postgres,但这应该可以完成这项工作。

搜索词将是MySQL
Pivot
data搜索词将是MySQL
Pivot
data我似乎无法获得正确的代码格式,但以下是我蹒跚而行的内容,它似乎可以工作,这要归功于小组讨论的提示:我似乎不能为了使代码格式正确,以下是我纠结在一起的内容,多亏了小组讨论技巧,它似乎起到了作用: