代码之家  ›  专栏  ›  技术社区  ›  J. Wolf

如何内部联接3个表?

  •  -1
  • J. Wolf  · 技术社区  · 7 年前

    我在使用内部联接创建视图时遇到问题,我有以下3个表

    • 项目(ProjID、ProjName、InitDate、EndDate)
    • 员工(EmpID、EmpName、电话、城市、工资)
    • 分配(项目、EmpID、小时、状态、日期)

    我要做的是创建一个名为“View1”的视图,以显示以下信息:

    • (ProjID/ProjName/EmpName/Hours)仅适用于 以“N”开头的项目ID(ProjID)。

    我使用了以下查询:

    CREATE OR REPLACE VIEW view1 AS
    
    SELECT
        projects.ProjID,
        projects.ProjName,
        employees.EmpName,
        assign.Hours
    FROM
        assign
        INNER JOIN employees ON employees.EmpID = assign.EmpID
        INNER JOIN projects
    WHERE
        projects.ProjID LIKE "N%";
    

    我得到的结果不起作用,它多次显示同一名员工具有不同的项目ID

    2 回复  |  直到 7 年前
        1
  •  1
  •   Jose Marfil    7 年前

    您可以使用此查询

    select * 
    from employees
    inner join assign on employees.EmpID=assign.EmpID
    inner join projects on projects.ProjID=assign.ProjID
    where projects.ProjID LIKE "N%";
    

    查询的不同之处在于,您需要建立项目和工作分配之间的关系。

    无论如何,如果您将同一名员工分配给多个与where子句匹配的项目,您将不止一次获得该员工。 也许您应该分组并使用一些聚合公式,如sum(hours)

        2
  •  0
  •   snipershady    7 年前
    CREATE OR REPLACE VIEW v1 AS
    (
        SELECT p.ProjID, p.ProjName, e.EmpName, a.Hours
        FROM Projects p
        INNER JOIN Assign a ON a.ProjID=p.ProjID
        INNER JOIN Emplyees e ON e.EmpID = a.EmpID
        WHERE p.ProjID LIKE "N%";
    );
    

    我想提醒一下,如果你能计算(a.Hours) 您必须将其他投影分组。

    推荐文章