查询包含多个 JOIN 时访问 SQL 语法错误(缺少运算符)
Access SQL syntax error (missing operator) when query contains multiple JOINs
我正在尝试进行更新查询(使用 Access 2013),该查询基于存储在两个单独链接的 table 中的值来计算值。这是我正在使用的代码:
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)
测试一下,如果我删除了一个内部联接(因此删除了对该 table 的所有引用),那么更新查询就可以正常工作,但是如果我将另一个内部联接放回去,我不断得到同样的语法错误。我不明白为什么...我应该可以将两个内部联接并排放置,不是吗?
当查询包含多个 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);
我正在尝试进行更新查询(使用 Access 2013),该查询基于存储在两个单独链接的 table 中的值来计算值。这是我正在使用的代码:
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)
测试一下,如果我删除了一个内部联接(因此删除了对该 table 的所有引用),那么更新查询就可以正常工作,但是如果我将另一个内部联接放回去,我不断得到同样的语法错误。我不明白为什么...我应该可以将两个内部联接并排放置,不是吗?
当查询包含多个 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);