使用开关和内部联接进行更新

时间:2018-08-21 05:22:49

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

我从其他人那里得到了一张表格,其中列出了各种选件代码,型号和可用性。目前,这些是在后端手动更新的(我知道...),并且需要3个月的时间。我想自动化该过程,我尝试使用CASE WHEN,但似乎Access无法处理它。我运行了一个查询,该查询基于一个子句进行了更新,并且运行良好,请参见下文。表1在我的数据库中,表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'
;

我不确定我是否在这里正确使用了开关,不胜感激。如果不是很清楚,我想要的是Table2.Availability = OPT,UPDATE Table1.Availability到“ Y”,其中代码相同,而Model =特定模型

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

预先感谢:)

1 个答案:

答案 0 :(得分:0)

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

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'
;