用于 SQL 内部联接的 MS Access 中的括号问题

Posted

技术标签:

【中文标题】用于 SQL 内部联接的 MS Access 中的括号问题【英文标题】:Trouble with parenthesis in MS Access for SQL Inner Joins 【发布时间】:2013-04-09 11:15:17 【问题描述】:

已在 MS Access 中尝试过以下 SQL,但似乎无法正常工作,有人有更好的主意吗?

SELECT top 4 Student.STUDENT_DEGREE, Student.STUDENT_SEX,STUDENT_GROUP_ID,STUDENT_GROUP_ID2,RESULT_MARK
FROM (((Student)
INNER JOIN Result ON Student.STUDENT_ID=Result.RESULT_STUDENT_ID)
INNER JOIN Group ON RESULT_GROUP_ID = GROUP_ID)
where STUDENT_GROUP_ID <> ''
order by Result.RESULT_MARK desc;

每当我运行它时,我都会得到错误:

FROM 子句中的语法错误

【问题讨论】:

【参考方案1】:

去掉Student周围多余的括号:

SELECT top 4 Student.STUDENT_DEGREE,Student.STUDENT_SEX,STUDENT_GROUP_ID,STUDENT_GROUP_ID2,RESULT_MARK
FROM ((Student
INNER JOIN Result ON Student.STUDENT_ID=Result.RESULT_STUDENT_ID)
INNER JOIN Group ON RESULT_GROUP_ID = GROUP_ID)
where STUDENT_GROUP_ID <> ''
order by Result.RESULT_MARK desc;

【讨论】:

【参考方案2】:

Group 是一个reserved word。将该名称括在方括号中以避免混淆数据库引擎。您还可以为表名指定别名。

FROM
    (Student
    INNER JOIN Result
    ON Student.STUDENT_ID=Result.RESULT_STUDENT_ID)
    INNER JOIN [Group] AS g
    ON Result.RESULT_GROUP_ID = g.GROUP_ID

我不得不猜测最后一个ON 子句中哪些表包含这些字段。如果您在 Access 查询设计器的设计视图中设置连接,它将帮助您获得正确的名称。它还将添加 db 引擎对包含多个连接的任何查询所需的括号。

还要限定SELECT 列表和查询中其他地方的字段名称的表源。同样,查询设计器可以为您提供正确的名称。

【讨论】:

以上是关于用于 SQL 内部联接的 MS Access 中的括号问题的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2013 中的嵌套 SQL 联接

Access-SQL:与多个表的内部联接

Access 上的内部联接 SQL

复合键中的右联接 - Access SQL

sql MS SQL ANSI-Standard与非ANSI内部联接

将 Access SQL 内部联接查询转换为 mySQL 查询的问题