Sql 显示同一表中不同名称的相同字段-Access 2010
我有Sql 显示同一表中不同名称的相同字段-Access 2010,sql,database,ms-access-2010,erd,Sql,Database,Ms Access 2010,Erd,我有EmployeeName;它来自Employee表。Employee表包含组织中的所有员工,Employee表引用Position表的主键,该表包含不同的职位名称。这就是我在Employee表中区分员工的方式;Employee表中的每条记录都有一个PosNo,它引用了Position表(worker=Pos1,manager=Pos2,等等),因此为了简单起见,Employee表中的记录类似于:EmployeeName,EmployeeAddress,DeptNo,PosNo 问题是:某些职
EmployeeName
;它来自Employee
表。Employee
表包含组织中的所有员工,Employee
表引用Position
表的主键,该表包含不同的职位名称。这就是我在Employee
表中区分员工的方式;Employee
表中的每条记录都有一个PosNo
,它引用了Position表(worker=Pos1,manager=Pos2,等等),因此为了简单起见,Employee表中的记录类似于:EmployeeName,EmployeeAddress,DeptNo,PosNo
问题是:某些职位低于其他职位。Employee
表中有工人,Employee
表中有经理。我想做一个表格,列出所有工人和他们的经理。例如,该表有两个字段:EmployeeName,ManagerName
Employee
表被分解为一个通用层次结构。Salary
和Hourly
表从Employee
表分支出来。然后,从Salary
表中,另一个表分支为Manager
(我称之为ProgramSupervisor
,它有一个唯一的字段)。不过,工人是小时表的一部分。经理(ProgramSupervisor
)和工人(Hourly
)通过ISL
表相互关联。经理是ISL的负责人,因此ISL的一个字段是ManagerNo
。然而,工人(Hourly
)在ISL
中工作,因此在他们的表Hourly
表中有ISLNo
字段
因此,我试图找到一种方法,将所有这些表关联起来,生成一个包含两个字段的表,worker和managers,其中worker通过ISL
表属于managers。我会使用某种嵌套查询吗?到目前为止,我将发布我的代码,这绝对是不正确的(甚至可能不正确),我将发布我的ERD,以便您能够更好地了解表之间的关系
SELECT EmpLastName + ', ' + EmpFirstName as ProgSupName,
EmpLastName + ', ' + EmpFirstName as EmpName
FROM Employee, Salary, ProgramSupervisor, ISL, Hourly
WHERE Employee.EmpNo = Salary.EmpNo
AND Salary.EmpNo = ProgramSupervisor.EmpNo
AND ProgramSupervisor.EmpNo = ISL.ProgramSupervisor_EmpNo
AND ISL.ISLNo = Hourly.ISLNo
AND Hourly.EmpNo = Employee.EmpNo
以最简单的形式,您可以将员工-主管关系提取为三个表:
[雇员]
EmpNo EmpFirstName EmpLastName
----- ------------ -----------
1蒙哥马利·伯恩斯
2荷马·辛普森
[每小时]
EmpNo-ISLNo
----- -----
2 1
[ISL]
ISLNo程序主管\u EmpNo ISLName
----- ----------------------- -------------------------
1 1斯普林菲尔德核电站
如果将它们放在一个如下所示的查询中
它产生如下结果:
Employee\u LastName Employee\u FirstName ISLName Supervisor\u LastName Supervisor\u FirstName
----------------- ------------------ ------------------------- ------------------- --------------------
辛普森荷马斯普林菲尔德核电站烧毁蒙哥马利
“但是等一下!”我听到你说,“在这个查询中有四个表,[Supervisor]表是从哪里来的?”
这只是使用[Supervisor]作为别名的[Employee]表的另一个实例。如果在讨论[EmpLastName]、[EmpFirstName]等时使用别名指定引用的实例,则表可以在查询中多次出现
上述查询的SQL在最后一行的第二个实例中显示了作为主管的员工
:
选择
Employee.Employee作为Employee_LastName,
Employee.EmpFirstName作为Employee_FirstName,
ISL.ISLName,
Supervisor.EmpLastName作为Supervisor\u LastName,
Supervisor.EmpFirstName作为Supervisor\u FirstName
从…起
(
受雇者
内连接
(
每小时
内连接
岛
ON Hourly.ISLNo=ISL.ISLNo
)
ON Employee.EmpNo=Hourly.EmpNo
)
内连接
作为主管的雇员
在ISL.ProgramSupervisor\u EmpNo=Supervisor.EmpNo上
有趣!!我从来不知道你可以把一张桌子称为另一个名字。编辑:成功了。谢谢