Ошибка доступа к синтаксису SQL (отсутствует оператор), когда запрос содержит несколько JOIN

Я пытаюсь сделать запрос UPDATE (с использованием 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 ответ

Решение

Для доступа к SQL требуются скобки, если запрос содержит несколько JOIN. Если вы построите запрос в конструкторе запросов 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);
Другие вопросы по тегам