Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示同一表中不同名称的相同字段-Access 2010_Sql_Database_Ms Access 2010_Erd - Fatal编程技术网

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上

有趣!!我从来不知道你可以把一张桌子称为另一个名字。编辑:成功了。谢谢