使用 switch 和内部连接进行更新

Posted

技术标签:

【中文标题】使用 switch 和内部连接进行更新【英文标题】:Update with switch and inner join 【发布时间】: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”,其中代码相同且模型 = 特定模型

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

提前致谢:)

【问题讨论】:

您使用的是什么语法参考以及满足它的理由是什么? 【参考方案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 查询设计按钮并将字段设置为更新。这就是我所做的一切。

以上是关于使用 switch 和内部连接进行更新的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL - 更新/内部连接 ​​[重复]

MariaDB 更新错误内部连接和选择

使用内部连接更新 [重复]

MS Access 更新查询和带字符串参数的内部连接

使用内部连接更新 Postgresql

如何使用内部连接更新行