如何内连接3个表?

时间:2018-03-04 21:49:32

标签: mysql inner-join create-view

我在使用Inner Join创建视图时遇到问题,我有这3个表

  • 项目(ProjID,ProjName,InitDate,EndDate)
  • 员工(EmpID,EmpName,电话,城市,工资)
  • 分配(ProjID,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 个答案:

答案 0 :(得分: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子句匹配的项目,您将不止一次获得该员工。 也许你应该分组并使用一些聚合公式,如总和(小时)

答案 1 :(得分: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) 你必须将其他预测分组。