使用 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 和内部连接进行更新的主要内容,如果未能解决你的问题,请参考以下文章