use*_*291 9 sql t-sql ms-access
我正在尝试UPDATE
在Access中运行具有不同WHERE
条件的查询:
UPDATE Table1
SET [Ticker] = "TXSFI" WHERE [Acct Numb] like "*03",
SET [Ticker] = "TESEI" WHERE [Acct Numb] like "*04";
Run Code Online (Sandbox Code Playgroud)
为什么我会收到错误?
您可以使用两个更新语句执行此操作:
UPDATE Table1
SET Table1.[Ticker] = 'TXSFI' WHERE Table1.[Acct Numb] like '*03';
Update Table1
SET Table1.[Ticker] = 'TESEI' WHERE Table1.[Acct Numb] like '*04';
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用条件更新(非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'
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我猜你正在使用Access.SQL中的标准通配符可能是,like '%03'
而Access使用的是'*'
代替'%'
.使用您正在使用的数据库标记问题是个好主意.
话虽如此,你不能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'
Run Code Online (Sandbox Code Playgroud)
无论您有多少个不同的子句,都可以通过一个查询(没有嵌套IIF
s)来做到这一点WHERE
。
这类似于我在此处(第二部分)的回答中所描述的内容:
创建一个临时表,如下所示:
Acct Numb NewTicker
-------------------------
*03 TXSFI
*04 TESEI
Run Code Online (Sandbox Code Playgroud)
您可以根据需要输入任意数量的新行,每一行都有一个帐号的“过滤值”和一个新Ticker
值。
Table1
使用此单个查询更新所有值:
UPDATE Table1
INNER JOIN tmp ON Table1.[Acct Numb] LIKE tmp.[Acct Numb]
SET Table1.Ticker = tmp.NewTicker;
Run Code Online (Sandbox Code Playgroud)
是的,这JOIN
部分乍一看很奇怪,但实际上可以与LIKE
.
完成后,您可以再次删除临时表。