【问题标题】:Displaying the same fields AS different names from the same table -Access 2010将相同的字段显示为来自同一个表的不同名称-Access 2010
【发布时间】:2013-11-30 20:57:15
【问题描述】:

我有EmployeeName;它来自Employee 表。 Employee 表包含组织中的所有员工,Employee 表引用 Position 表的主键,该表包含不同的职位名称。这就是我在Employee 表中区分员工的方式; Employee 表中的每条记录都有一个 PosNo 引用 Position 表(worker = Pos1,manager = Pos2 等...)所以为简单起见,employee 表中的记录类似于:@987654330 @

问题是:某些职位在其他职位之下。 Employee 表中有工人,Employee 表中有经理。我想做一张列出所有工人及其经理的表格。例如,该表将有两个字段:EmployeeName, ManagerName

Employee 表被分解为一个泛化层次结构。 SalaryHourly 表从 Employee 表分支出来。然后,从Salary 表中,另一个名为Manager 的表分支出来(我称之为ProgramSupervisor;它有一个唯一的字段)。工人是Hourly 表的一部分。 Managers(ProgramSupervisor) 和 Workers(Hourly) 通过ISL 表相互关联。经理是 ISL 的负责人,因此 ISL 将 ManagerNo 作为其字段之一。但是,Workers(Hourly) 在ISL 中工作,因此在他们的表Hourly 中将ISLNo 作为一个字段。

所以,我试图找到一种方法将所有这些表关联起来,创建一个包含两个字段(工人和经理)的表,其中工人通过ISL 表属于经理。我会使用某种嵌套查询吗?到目前为止,我将发布我的代码,这绝对不正确(甚至可能在正确的轨道上也没有),我将发布我的 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

ERD

【问题讨论】:

    标签: sql database ms-access-2010 erd


    【解决方案1】:

    在最简单的形式中,您可以将 Employee-Supervisor 关系提取为三个表:

    [员工]

    EmpNo  EmpFirstName  EmpLastName
    -----  ------------  -----------
        1  Montgomery    Burns      
        2  Homer         Simpson    
    

    [每小时]

    EmpNo  ISLNo
    -----  -----
        2      1
    

    [ISL]

    ISLNo  ProgramSupervisor_EmpNo  ISLName                  
    -----  -----------------------  -------------------------
        1                        1  Springfield Nuclear Plant
    

    如果你把它们放在一个像这样的查询中

    它会产生如下结果:

    Employee_LastName  Employee_FirstName  ISLName                    Supervisor_LastName  Supervisor_FirstName
    -----------------  ------------------  -------------------------  -------------------  --------------------
    Simpson            Homer               Springfield Nuclear Plant  Burns                Montgomery          
    

    “但是等一下!”我听到你说,“那个查询中有 四个 表。[Supervisor] 表是从哪里来的?”

    这只是 [Employee] 表的另一个实例,它使用 [Supervisor] 作为其别名。如果我们在谈论 [EmpLastName]、[EmpFirstName] 等时使用别名来指定我们所引用的实例,则一个表可以多次出现在查询中。

    上述查询的 SQL 在倒数第二行显示第二个实例 Employee AS Supervisor

    SELECT 
        Employee.EmpLastName AS Employee_LastName, 
        Employee.EmpFirstName AS Employee_FirstName, 
        ISL.ISLName, 
        Supervisor.EmpLastName AS Supervisor_LastName, 
        Supervisor.EmpFirstName AS Supervisor_FirstName
    FROM 
        (
            Employee 
            INNER JOIN 
            (
                Hourly 
                INNER JOIN 
                ISL 
                    ON Hourly.ISLNo = ISL.ISLNo
            ) 
                ON Employee.EmpNo = Hourly.EmpNo
        ) 
        INNER JOIN 
        Employee AS Supervisor 
            ON ISL.ProgramSupervisor_EmpNo = Supervisor.EmpNo
    

    【讨论】:

    • 有趣!!我从不知道您可以将表称为不同的名称。编辑:它奏效了。谢谢!
    猜你喜欢
    • 2017-07-24
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多