-1

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

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

我想做的是创建一个名为“View1”的视图来向我展示这些信息:

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

我使用了这个查询:

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 的同一员工

4

2 回答 2

1

你可以使用这个查询

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)

于 2018-03-04T22:13:48.813 回答
0
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%";
);

我想提醒一下,如果您要 SUM(a.Hours),您将不得不对其他预测进行分组。

于 2018-03-04T22:16:20.023 回答