查询包含多个 JOIN 时访问 SQL 语法错误(缺少运算符)

Posted

技术标签:

【中文标题】查询包含多个 JOIN 时访问 SQL 语法错误(缺少运算符)【英文标题】:Access SQL syntax error (missing operator) when query contains multiple JOINs 【发布时间】:2015-03-08 17:08:47 【问题描述】:

我正在尝试进行更新查询(使用 Access 2013),该查询根据存储在两个单独的链接表中的值计算值。这是我正在使用的代码:

UPDATE tblCreatures 

INNER JOIN tblRole ON tblCreatures.Role = tblRole.RoleName 
INNER JOIN tblRank ON tblCreatures.Rank = tblRank.RankName

SET tblCreatures.HP = ((tblRole.Level_0_HP + (tblCreatures.NominalLevel * tblRole.BonusHP)) * tblRank.HP_Multiplier);

这给了我一个语法错误,说

Syntax error (missing operator) in query expression "tblCreatures.Role = tblRole.RoleName INNER JOIN tblRank ON tblCreatures.Rank = tblRank.RankNam"

(是的,它切断了 RankNam,而不是 RankName)

测试一下,如果我删除了一个内部联接(因此删除了对该表的所有引用),那么更新查询就可以正常工作,但是如果我将另一个内部联接放回去,我会不断收到相同的语法错误.我不明白为什么...我应该能够将两个内部连接放在一起,不是吗?

【问题讨论】:

再一次,如果我取出第二个内部联接,此更新工作得非常好。只有当我同时使用两个内部连接时才会出错。 【参考方案1】:

当查询包含多个 JOIN 时,Access SQL 需要括号。如果您在 Access 的查询设计器中构建查询,它将如下所示(为清晰起见重新格式化):

UPDATE 
    (
        tblCreatures 
        INNER JOIN 
        tblRole 
        ON tblCreatures.Role = tblRole.RoleName
    ) 
    INNER JOIN 
    tblRank 
    ON tblCreatures.Rank = tblRank.RankName 
SET tblCreatures.HP = ((tblRole.Level_0_HP + (tblCreatures.NominalLevel * tblRole.BonusHP)) * tblRank.HP_Multiplier);

【讨论】:

谢谢!我什至尝试过括号,但我没有在括号内包含 tblCreatures 。我想知道为什么它需要这样做......但无论如何,这就像一个魅力。感谢您为我阐明了 Access 语法的一个奇怪的怪癖!

以上是关于查询包含多个 JOIN 时访问 SQL 语法错误(缺少运算符)的主要内容,如果未能解决你的问题,请参考以下文章

第九章 SQL查询数据库

第九章 SQL查询数据库

MS Acess不支持多个left join(语法错误(操作符丢失)在查询表达式 xx中)

MYSQL 语法错误 LEFT JOIN

SQL:加入语法错误

连接操作访问 SQL 的语法错误