Это работает:
update #tmptbl
set old.amount = new.amount
from #tmptbl old, #tmptbl new
where
/*filter old*/
old.account = 'ACT1'
and old.date = '2010-12-30'
and old.client = 'CLIENTA'
/* self-join new and old*/
and old.account = new.account
and old.client = new.client
/* filter new */
and new.date = '2010-12-31'
go
Если вы пропустите псевдоним таблицы, которую вы обновляете, т.е. set amount = new.amount
, тогда Sybase связывает обновляемую таблицу с первым соответствиемтаблицу в предложении from, так что в этом случае, чтобы ваше обновление работало, вам нужно, чтобы from читал from #tmptbl new, #tmptbl old
.
Вывод:
account client amount date
---------- --------- --------- ----------------
ACT1 CLIENTA 12 30/12/2010 00:00
ACT2 CLIENTB 5 30/12/2010 00:00
ACT2 CLIENTB 6 31/12/2010 00:00
ACT1 CLIENTA 12 31/12/2010 00:00