【问题标题】:How to JOIN Four tables, with muliple constraints如何加入四个表,具有多个约束
【发布时间】:2019-06-17 18:16:03
【问题描述】:

我必须编写一条 SQL 语句来显示相似类型的总和,我还需要从另一个表中添加另一个排除约束。

这是使用 Microsoft Access 2010。 问题如下:编写一条 SQL 语句来显示每种 OWNER 类型的 HoursWorked 总和,但排除 ExperienceLevel 为 Junior 的员工的服务,并排除任何少于三个成员的 Type。

 SELECT OWNER.Type, SUM(HoursWorked) AS Total_Work_Hours
FROM OWNER AS O, PROPERTY AS P, SERVICE AS S, EMPLOYEE AS E
WHERE O.OwnerID = P.OwnerID
AND P.Property= S.PropertyID
AND S.EmployeeID=E.EmployeeID
AND O.Type>3;

【问题讨论】:

    标签: sql ms-access inner-join


    【解决方案1】:

    你可以试试这个。

    SELECT O.[Type], SUM(e.HoursWorked) AS Total_Work_Hours,count(e.employeeid) as Total_Members
    FROM OWNER AS O, PROPERTY AS P, SERVICE AS S, EMPLOYEE AS E
    WHERE O.OwnerID = P.OwnerID
    AND P.Property= S.PropertyID
    AND S.EmployeeID=E.EmployeeID
    AND e.ExperienceLevel NOT IN ('Junior')
    Group by o.[Type]
    Having count(e.employeeid)>=3;
    

    【讨论】:

    • 由于某种原因我仍然得到同样的错误,为 OWNER.Type 输入参数
    • 那么你一定是为owner.type写了错误的列名。验证它在数据库中的名称
    • "输入参数值?"所有者类型。表名为 Owner,列名为 Type。
    • 您现在可以查看
    • 如果可能,请编辑您的问题并提供所有表格及其列名。
    【解决方案2】:

    学习使用正确、明确、标准 JOIN 语法。您还需要一个正确的 GROUP BY 并且应该限定所有列引用:

    SELECT o.Type, SUM(HoursWorked) AS Total_Work_Hours
    FROM ((OWNER AS O INNER JOIN
           PROPERTY AS P
           ON O.OwnerID = P.OwnerID
          ) INNER JOIN
          SERVICE AS S
          ON P.Property = S.PropertyID
         ) INNER JOIN
         EMPLOYEE AS E
         ON S.EmployeeID = E.EmployeeID
    WHERE O.Type > 3 AND
          E.ExperienceLevel <> 'Junior'
    GROUP BY o.Type
    HAVING COUNT(*) >= 3;
    

    【讨论】:

    • :-) 旧式连接仍然和以往一样“标准”。
    • 谢谢,我会的!我仍在学习,我仍在努力更好地了解如何加入表格,似乎有很多方法可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多