【问题标题】:Microsoft Access 2007 - querying mulitple tables produces errorsMicrosoft Access 2007 - 查询多个表会产生错误
【发布时间】:2012-01-07 20:40:53
【问题描述】:

我正在尝试在 MS Access 中创建一个查询,该查询最多可查询 4 ​​个表以生成良好的信息整理。
单击视图后,我收到一个错误:

查询表达式中的语法错误(缺少运算符) session.sessionTypeFK=session_type.session_type.id) 内部加入人员 (sessions.StaffFK=staff.staff_id) 内部加入人员 (staff.FK_personID=person.personID'

有趣的是它总是错误地错过最后一个括号?

SELECT sessions.*, session_type.[Session Type],forename,surname
from sessions
inner join session_type on (sessions.SessionTypeFK=session_type.session_type_id)
inner join staff on (sessions.StaffFK=staff.Staff_ID)
inner join person on (staff.FK_PersonID=person.PersonID)

我知道 MS Access 是模糊的,你必须用 () 包裹内连接才能让它工作,我已经用其他几个查询做到了这一点,但我真的很难解析这个位。

【问题讨论】:

    标签: ms-access join


    【解决方案1】:

    你的意思是:

    SELECT sessions.*, session_type.[Session Type],forename,surname
    from ((sessions
    inner join session_type on sessions.SessionTypeFK=session_type.session_type_id)
    inner join staff on sessions.StaffFK=staff.Staff_ID)
    inner join person on staff.FK_PersonID=person.PersonID
    

    为什么不使用 Access 查询设计窗口,然后切换到 SQL 视图来获取示例 SQL?

    【讨论】:

    • 非常感谢。如果微软坚持标准而不是发明自己的标准,那会容易得多。
    【解决方案2】:

    由于它们都是内部连接,因此您可以以更简单的格式重新编写查询,而无需使用查询设计器,如下所示:

    SELECT S.*, T.[Session Type], P.Forename, P.Surname
    FROM Sessions As S, Session_Type As T, Staff As F, Person As P
    WHERE T.Session_Type_ID = S.SessionTypeFK
    AND F.Staff_ID = S.StaffFK
    AND P.PersonID = F.FK_PersonID
    

    只要您不使用外连接,您就可以在 WHERE 子句中链接您的表,这样就很容易回读。您可能还注意到我在表名中使用了别名,这也有助于使 SQL 更易于理解,并且如果您正在编写大型 SQL 或具有长表名,则可以显着缩小代码。

    【讨论】:

    • 我不确定隐式连接是一个好主意,考虑“......有交叉连接的不希望的可能性:您可以在没有相应 WHERE 子句的情况下将表添加到 FROM 部分。这被认为有害。” -- stackoverflow.com/questions/44917/…
    • @Remou 公平点,尽管以这种方式编写 SQL 有望鼓励人们成为 SQL 能力(除了查询设计器,因为它在某些情况下可能效率低下)并了解不使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多