【问题标题】:Update with switch and inner join使用 switch 和内部连接进行更新
【发布时间】:2018-08-21 05:22:48
【问题描述】:

我收到了一张表格,其中包含其他人提供的一系列选项代码、型号和可用性。目前这些是在后端手动更新的(我知道......)并且需要长达 3 个月的时间。我想自动化这个过程,我尝试使用 CASE WHEN 但似乎 Access 无法处理它。我运行了一个基于一个子句更新的查询,它运行良好,见下文。表 1 在我的数据库中,表 2 是我被翻译成可用格式的数据。它只是一个有 2 列的表;选项代码和可用性(与特定型号相关)

UPDATE Table1
SET Table1.Availability = 'Y'
WHERE 
(
    SELECT Table1.Availability
    FROM Table1
    INNER JOIN Table2
    ON Table1.Code = Table2.Code
    WHERE Table2.Availability='OPT'
)

这可行,但需要对每种可用性类型进行新查询。以下是我为每种可用性类型更新的尝试。它说有一个语法错误@ Switch(...

UPDATE Table1
SET Table1.Availability = 
Switch(
        Table2.Availability = 'OPT', 'Y',
        Table2.Availability = 'STD', 'S', 
        Table2.Availability = 'DEL', 'N'
    )
FROM Table1
INNER JOIN Table2
ON Table1.Code = Table2.Code
WHERE ModelCode = '1234'
;

我不确定我是否在这里正确使用了 switch,感谢帮助。如果不清楚我想要的是如果 Table2.Availability = OPT,则将 Table1.Availability 更新为“Y”,其中代码相同且模型 = 特定模型

我必须指定型号代码,因为给定选项代码(代码)的可用性是唯一的。我得到的数据是一团糟,最容易将其分类以对特定数据进行建模。

提前致谢:)

【问题讨论】:

  • 您使用的是什么语法参考以及满足它的理由是什么?

标签: ms-access join switch-statement sql-update


【解决方案1】:

考虑以下经过测试且有效的语法:

UPDATE Table1
INNER JOIN Table2
ON Table1.Code = Table2.Code
SET Table1.Availability = 
Switch(
        Table2.Availability = 'OPT', 'Y',
        Table2.Availability = 'STD', 'S', 
        Table2.Availability = 'DEL', 'N'
    )
WHERE ModelCode = '1234'
;

【讨论】:

  • 非常感谢,成功了。出于某种原因,我认为 JOIN 必须在 SET 之后进行……非常感谢。
  • 使用 Access 查询生成器可以帮助避免此类错误。首先构建 SELECT 以获得所需的表连接和过滤器,然后单击 UPDATE 查询设计按钮并将字段设置为更新。这就是我所做的一切。
猜你喜欢
  • 2014-12-29
  • 2020-02-05
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2012-09-18
  • 2012-09-18
  • 1970-01-01
  • 2019-06-25
相关资源
最近更新 更多