我对数据库表和它的查询有一个问题。让我告诉你这是怎么回事。这是关于项目经理与员工的关系。现在让我在陈述中说明他们之间的关系..。
Manager = manager是项目负责人,也可以是多个项目的经理。
Employee =(S)他是一个只从事由经理管理的项目或projectS的人。
项目= Project是一个仅由一个管理人员管理的项目。
员工-经理关系
经理也是公司的雇员,对吗?根据这一点,我希望他们的关系像->一样,一个员工可以由一个以上的经理来管理。
所有的经理都有相同的头衔,我的意思是没有经理。只有员工的经理。例如,5名员工可以由Manager管理。
员工-项目关系
员工可以有一个有意义的项目,员工也可以有一个以上的项目也是有意义的。所以项目也可以有一个以上的员工。(提醒:项目可以有多个员工,但不能由一个以上的经理管理)。
经理-项目关系
经理可以有多个项目。但是项目不能由一个以上的经理来管理。
PS:根据项目,不同项目中的同一个员工可以由多个经理管理--参见下面的示例.
Android应用程序项目经理-> Patrick
安卓应用程序项目的员工--> John,Susan,Megan,Joe.
另一个项目..。
IOS应用程序项目经理-> Ryan
IOS应用程序项目的员工-克莱尔、沃尔特、罗伯特、Megan
现在让我展示一下我的桌子。我真不知道该怎么做..。

在该表中,我尝试使用"manager_id(FK)“来表示"employee_id(PK)”,因为Manager是公司的员工。
我在Project表中有"manager_id(FK)“,在employee表中引用"manager_id”。
这就是我不太明白的proj_employee表。我在互联网上的例子中发现了这种情况。这样我们就可以在查询中调用它们。
现在让我发布我试过的问题但永远得不到解决方案..。
select
e.name as employee_name,
pm.name as manager_name
from Proj_Employee as pe
left outer join Employee as e on e.employee_id = pe.emp_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>我想问这个..。我想要一个查询,显示我的EmployeeName,ManagerName的选择项目。如果我的桌子错了,你能给我指路或者告诉我怎么做吗?
我有知识,但我想不出怎样才能使这件事成功。
发布于 2013-08-21 18:09:16
我想我终于看到了这个问题。
您说,“项目表中有"manager_id(FK)”,在employee表中引用"manager_id“。
我想这可能就是问题所在。我认为您希望employee_id表中的manager_id是employee表中的project列的外键,而不是manager_id列的外键。但你在你的查询中得到了正确的答案。
这里的演示: http://www.sqlfiddle.com/#!2/e31fb/1
与您的问题无关,但我想借此机会指出,在每个表中都有一个名为id的主键列可以帮助我们使“错误”的SQL看起来像“错误的”SQL。“让错误的代码看起来不对”--乔尔·斯波斯基
如果我们期望:
主键的形式为:id
外键的形式:parent_table_id,或parent_role_id
连接的绝大部分将从外键到主键。
那么,我们期望大多数连接都是形式的。
child.parent_id = parent.id而外键定义的形式是
FK_child_parent_or_role (parent_or_role_id) REFERENCES parent (id)这就形成了这样的外键定义:
FK_project_manager (manager_id) REFERENCES employee (manager_id)在我们看来是“错的”。我们希望看到对id列的引用。
发布于 2013-08-21 17:54:17
您可以使用以下内容获得一个列表(project_name、manager_name、employee_name):
SELECT p.project_name
, e.name as employee_name
, m.name as manager_name
FROM project p
INNER JOIN employee m ON p.manager_id = m.employee_id
LEFT JOIN proj_employee pe ON p.project_id = pe.project_id
LEFT JOIN employees e ON pe.emp_id = e.employee_id;在两个项目中,你会得到这样的结果,其中一个项目没有员工:
project_name | employee_name | manager_name
---------------+---------------+--------------
Stack O | Alice | Eve
Stack O | Bob | Eve
Lemon Squeezy | | Alice发布于 2013-08-21 18:02:11
没有理由有外部连接,我可以看到。
select p.Project_Name, m.name as Manager, e.name as Employee
from Project P
join Employee M on m.employee_id = p.manager_id
join project_employee pe on pe.project_id = p.project_id
join Employee E on e.employee_id = pe.employee_idhttps://stackoverflow.com/questions/18363656
复制相似问题