我正在尝试以不同的条件UPDATE
在 Access 中运行查询:WHERE
UPDATE Table1
SET [Ticker] = "TXSFI" WHERE [Acct Numb] like "*03",
SET [Ticker] = "TESEI" WHERE [Acct Numb] like "*04";
为什么我会收到错误消息?
您可以使用两个更新语句来做到这一点:
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'
无论您有多少不同的子句,都可以通过一个查询(没有嵌套s)来做到这一点。IIF
WHERE
这类似于我在此处的回答(第二部分)中描述的内容:
创建一个临时表,如下所示:
Acct Numb NewTicker
-------------------------
*03 TXSFI
*04 TESEI
您可以根据需要输入任意数量的新行,每一行都有一个帐号的“过滤值”和一个新Ticker
值。
Table1
使用此单个查询更新所有值:
UPDATE Table1
INNER JOIN tmp ON Table1.[Acct Numb] LIKE tmp.[Acct Numb]
SET Table1.Ticker = tmp.NewTicker;
是的,这JOIN
部分乍一看很奇怪,但实际上可以加入LIKE
.
完成后可以再次删除临时表。