Microsoft Access 2007 - 查询多个表会产生错误

Posted

技术标签:

【中文标题】Microsoft Access 2007 - 查询多个表会产生错误【英文标题】:Microsoft Access 2007 - querying mulitple tables produces errors 【发布时间】: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 是模糊的,你必须用 () 包裹内连接才能让它工作,我已经用其他几个查询做到了这一点,但我真的很难解析这个位。

【问题讨论】:

【参考方案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 部分。这被认为有害。” -- ***.com/questions/44917/… @Remou 公平点,尽管以这种方式编写 SQL 有望鼓励人们成为 SQL 能力(除了查询设计器,因为它在某些情况下可能效率低下)并了解不使用。

以上是关于Microsoft Access 2007 - 查询多个表会产生错误的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access 2007 - 如何更改数据库路径

Microsoft Access 2007 数据库相关

Microsoft Access 2007 - 查看报表中使用的查询?

带有条件列的 Microsoft Access 2007 报表

从 Microsoft Access 2007 迁移到 Sql Server 2005

Microsoft Access 2007 - 查询多个表会产生错误