我正在尝试在Access中使用不同的UPDATE
条件运行WHERE
查询:
UPDATE Table1
SET [Ticker] = "TXSFI" WHERE [Acct Numb] like "*03",
SET [Ticker] = "TESEI" WHERE [Acct Numb] like "*04";
为什么会出错?
答案 0 :(得分:7)
您可以使用两个更新语句执行此操作:
UPDATE Table1
SET Table1.[Ticker] = 'TXSFI' WHERE Table1.[Acct Numb] like '*03';
Update Table1
SET Table1.[Ticker] = 'TESEI' WHERE Table1.[Acct Numb] like '*04';
或者,您可以使用条件更新(非访问版本)来组合这些:
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使用'*'
而不是'%'
。最好用您正在使用的数据库标记您的问题。
话虽如此,您无法在Access中使用case
:
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'
答案 1 :(得分:1)
使用一个查询(无需嵌套IIF
s),无论您有多少WHERE
个条款,都可以执行此操作。
这与我在my answer here (second part)中所描述的相似:
创建一个如下所示的临时表:
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
部分乍一看看起来很奇怪,但是it's actually possible to join with LIKE
。
您可以在完成后再次删除临时表。