19

我正在尝试以不同的条件UPDATE在 Access 中运行查询:WHERE

UPDATE Table1
SET [Ticker] = "TXSFI" WHERE [Acct Numb] like "*03",
SET [Ticker] = "TESEI" WHERE [Acct Numb] like "*04";

为什么我会收到错误消息?

4

2 回答 2

20

您可以使用两个更新语句来做到这一点:

UPDATE Table1
    SET Table1.[Ticker] = 'TXSFI' WHERE Table1.[Acct Numb] like '*03';

Update Table1
    SET Table1.[Ticker] = 'TESEI' WHERE Table1.[Acct Numb] like '*04';

或者,您可以使用条件更新(非 Access 版本)组合这些:

update table1
   SET Table1.[Ticker] = (case when  Table1.[Acct Numb] like '%03' then 'TXSFI'
                               when Table1.[Acct Numb] like '%04' then 'TESEI'
                          end)
   where Table1.[Acct Numb] like '%03' or Table1.[Acct Numb] like '%04'

顺便说一句,我猜你正在使用 Access。SQL 中的标准通配符是,like '%03'但 Access 使用 a'*'而不是'%'. 用您正在使用的数据库标记您的问题是个好主意。

话虽如此,您不能case在 Access 中使用:

update table1
   SET Table1.[Ticker] = iif(Table1.[Acct Numb] like '*03', 'TXSFI', 'TESEI')
   where Table1.[Acct Numb] like '*03' or Table1.[Acct Numb] like '*04'
于 2013-07-01T14:07:32.490 回答
5

无论您有多少不同的子句,都可以通过一个查询(没有嵌套s)来做到这一点。IIFWHERE

这类似于我在此处的回答(第二部分)中描述的内容:

  1. 创建一个临时表,如下所示:

    Acct Numb      NewTicker
    -------------------------
    *03            TXSFI
    *04            TESEI
    

    您可以根据需要输入任意数量的新行,每一行都有一个帐号的“过滤值”和一个新Ticker值。

  2. Table1使用此单个查询更新所有值:

    UPDATE Table1
    INNER JOIN tmp ON Table1.[Acct Numb] LIKE tmp.[Acct Numb]
    SET Table1.Ticker = tmp.NewTicker;
    

    是的,这JOIN部分乍一看很奇怪,但实际上可以加入LIKE.

  3. 完成后可以再次删除临时表。

于 2013-07-01T21:47:59.580 回答