Mysql 同一项目中的员工和经理?SQL
我做了一些挖掘,但无法在脑海中安排它。。。我的问题是找到同一项目中的员工和经理?我有两个表,分别是Employee和Project。他们喜欢Mysql 同一项目中的员工和经理?SQL,mysql,sql,database,Mysql,Sql,Database,我做了一些挖掘,但无法在脑海中安排它。。。我的问题是找到同一项目中的员工和经理?我有两个表,分别是Employee和Project。他们喜欢 *Employee* ---------- employee_id (PK) name manager_id (FK) ref employee_id in same table which is employee_id. usertyp
*Employee*
----------
employee_id (PK)
name
manager_id (FK) ref employee_id in same table which is employee_id.
usertype
*Project*
----------
project_id(PK)
project_name
employee_id(FK) ref employee_id in emplyee table
manager_id(FK) ref employee_id in emplyee table
让我更具体一点。项目必须有一名经理和多名员工。如何在查询中写入?usertype列指定此员工经理或USERnormal员工
查询运行示例:
______ ______________ ____________
|name| |manager_name| |project_name|
John Susan CalendarIphone
Mike Susan CalendarIphone
Joe Patrick AndoridApp
Megan Susan CalendarIphone
Melek Patrick AndoridApp
正如您所见,Mike可以在多个项目中工作,并且可以有多个经理。但管理者必须只拥有一个项目。那么我应该怎么做才能得到这个呢?先谢谢你
编辑----------------------------------------
我有一个项目,其中有下拉列表。我在这里选择了一个项目,它给我显示了一个根据这个项目的表格,并列出了我这个项目的经理,那个项目的员工。我问项目名称,只要再创建一列就可以忽略它。我只想看到it经理和it员工
编辑2------------------------------
例如,项目ID=2,在这个项目中,我们有1名经理和员工
|name| |manager_name|
John Susan
Mike Susan
Joe Susan
Megan Susan
Melek Susan
由于每个项目行都有员工和经理,因此只需在两个不同的键上转到employee表即可获得员工和经理的姓名。然后,很自然地以项目为基础进行查询,因为这是您正在收集的信息,所以您可以从中提取项目名称。您的模式不好。应该是这样的:
Employee*
----------
employee_id (PK)
name
manager_id (FK) ref employee_id in employee table
*Project*
----------
project_id(PK)
project_name
manager_id(FK) ref employee_id in employee table
*Project_Employee*
----------
project_id(FK) ref project_id in project table
employee_id(FK) ref employee_id in employee table
然后你可以做:
select
e.name as name,
em.name as manager_name
p.project_name
pm.name as project_manager_name
from Employee as e
left outer join Employee as em on em.employee_id = e.manager_id
left outer join Project_Employee as pe on pe.employee_id = e.employee_id
left outer join Project as p on p.project_id = pe.project_id
left outer join Employee as pm on pm.employee_id = p.manager_id
但对于每个员工,可能有多个项目,员工可以在这个查询中重复
更新
更新2
如果Mike的经理因项目而异,那么它在employee表和project表中都没有位置。它应该在项目员工表中,我不知道经理也是员工?经理id应该指员工id吗?谢谢你的回答。。。你建议避免重复什么?在你的问题中有重复的标记。你可以使用group_concat让employe的所有项目都以逗号分隔,例如,我不知道你的目标是什么。我明白你的意思。请看一下我的编辑。提前感谢检查更新的查询。我仍然没有得到您的确切要求,我的查询将返回您的员工列表,bit属性是_manager谢谢您的回答,它会有所帮助。让我再问你们一次:我想在同一个项目中得到经理和员工的名字。但经理不能有超过1个项目。员工可以在多个项目上工作。当我运行查询时,它应该在我的上次更新中返回:请参阅答案
select
e.name as name,
em.name as manager_name
p.project_name
pm.name as project_manager_name
from Employee as e
left outer join Employee as em on em.employee_id = e.manager_id
left outer join Project_Employee as pe on pe.employee_id = e.employee_id
left outer join Project as p on p.project_id = pe.project_id
left outer join Employee as pm on pm.employee_id = p.manager_id
select
e.name, u.is_manager
from (
select employee_id, 0 as is_manager from Project_Employee as pe where pe.idproject_id= <project id>
union all
select manager_id, 1 as is_manager from Project as p where p.project_id= <project id>
) as u
inner join Employee as e on e.employee_id = u.employee_id
order by u.is_manager desc
select
e.name as employee_name,
pm.name as manager_name
from Project_Employee as pe
left outer join Employee as e on e.employee_id = pe.employee_id
left outer join Project as p on p.project_id = pe.project_id
left outer join Employee as pm on pm.employee_id = p.manager_id
where pe.project_id = <project id>