【问题标题】:MS Access UPDATE Query errorsMS Access UPDATE 查询错误
【发布时间】:2019-02-05 15:18:52
【问题描述】:

我很难使用 MS Access,因为与其他数据库相比,语法有点挑剔。

我正在尝试验证一个表并将该表与包含多列信息的主表进行比较。目前,我正在尝试将表 ct2011 中字段名称为 Difference_Value 的表更新为等于 (ct2011.Distribution_Amount - AggregateFinal.SumOfDollars)

还指定要更新的行,因为并非 MASTER 中的所有行都在表 ct2011 中。

以下是我的查询。

UPDATE ct2011
SET ct2011.Difference_Value = (ct2011.Distribution_Amount - AggregateFinal.SumOfDollars)
FROM
       ct2011 as ct
INNER JOIN 
       AggregateFinal af
ON
       ct.Employee_ID = af.EmpId AND ct.Legal_Name = af.LegalName AND ct.Distribution_Plan_Year = af.CalculationAwardPeriod AND ct.Award_Year = af.AwardPeriod;

我收到了Syntax error (missing operator)。它指定它在= 之后的SET expressions 期间遇到错误。

【问题讨论】:

  • 给定查询到底有什么问题?有错误提示吗?
  • @NicoHaase 我收到语法错误(缺少运算符)。它指定它在 = 之后的 SET 表达式期间遇到错误。
  • 您为 ct2011 设置了 ct 的表别名,但继续使用 ct2011 来完全限定字段名称。
  • MS Access 中的UPDATE 查询中没有FROM 子句。在你声称这是 ficky 之前,MySQL 也遵循同样的UPDATE ... JOIN 风格。还是挑剔?尝试在UPDATE query in Oracle 中编写一个联接,它既不支持JOIN 也不支持FROM,除非在子查询中,也类似于SQLite。是的,所有 SQL 方言都挑剔

标签: sql ms-access


【解决方案1】:

在 MS Access update 查询中,join 条件应遵循 update 关键字,例如:

update 
    ct2011 ct inner join aggregatefinal af on
    ct.employee_id = af.empid and 
    ct.legal_name = af.legalname and 
    ct.distribution_plan_year = af.calculationawardperiod and
    ct.award_year = af.awardperiod
set 
    ct.difference_value = (ct.distribution_amount - af.sumofdollars)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多