首页 > 解决方案 > 我在这个访问 SQL 查询中缺少什么?

问题描述

我正在尝试使用 INNER JOIN 函数从几个表中提取特定信息,但我认为我的语法有问题 - 思考太多或太少 ()。社区是怎么想的?

SELECT Employee.EmployeeID
    ,Service.HoursWorked
FROM (
    Equipment INNER JOIN (Equipment Repair)
        ON Equipment.EquipmentID = Equipment Repair.RepairID
    )
INNER JOIN (
    (
        (
            Service INNER JOIN EMPLOYEE
                ON Service.ProductID = EMPLOYEE.EmployeeID
            ) INNER JOIN (
            OWNER INNER JOIN Property
                ON OWNER.OwnerID = Property.OwnerID
            )
        INNER JOIN SubProperty
            ON Property.PropertyID = SubProperty.PropertyID
        )
    ON Service.PropertyID = Subproperty.PropertyID
    )
INNER JOIN TrainingCourse
    ON EMPLOYEE.EmployeeID = TrainingCourse.EmployeeID
        ON Equipment.EquipmentID = TrainingCourse.EquipmentID ORDER BY Employee.EmployeeID

标签: sqlms-access

解决方案


您的查询正在尝试将多个表连接在一起,但您可能也在尝试使用括号?那些没有你在这里可能期望的效果。

如果没有(显然?)虚假括号,我会将该查询理解为:

SELECT
    Employee.EmployeeID
    ,Service.HoursWorked
FROM Equipment
    INNER JOIN (Equipment Repair)
        ON Equipment.EquipmentID = Equipment Repair.RepairID
    INNER JOIN Service
    INNER JOIN EMPLOYEE
        ON Service.ProductID = EMPLOYEE.EmployeeID
    INNER JOIN OWNER
    INNER JOIN Property
        ON OWNER.OwnerID = Property.OwnerID
    INNER JOIN SubProperty
        ON Property.PropertyID = SubProperty.PropertyID
        ON Service.PropertyID = Subproperty.PropertyID
    INNER JOIN TrainingCourse
        ON EMPLOYEE.EmployeeID = TrainingCourse.EmployeeID
        ON Equipment.EquipmentID = TrainingCourse.EquipmentID
ORDER BY Employee.EmployeeID

但这仍然有错误,因为许多连接都缺少连接条件,有些连接有多个连接条件。

相反,您需要考虑您试图表达的投影操作。哪些表中的哪些列应该出现在结果集中(这告诉您要连接哪些表),以及在什么条件下表 Foo 中的一行应该出现在总结果集中(这告诉您该表的连接条件) .


推荐阅读