更新表加入对临时表
问题描述:
我有两个表,更新表加入对临时表
tblFXRates
Base Quote Rate
USD JPY 1.5
USD GBP 2.5
USD EUR 1.75
EUR JPY 1.5
USD USD 1
tblHoldings
FX FXRate
EUR null
EUR null
USD null
GBP null
JPY null
我想什么做的是更新FXRate在tblHoldings中。所以我想选择tblFXRates中基数等于USD的所有利率。然后将此查询的结果加入到tblHoldings中的FX列以更新FXRate。它应该看起来像下面,
结果
FX FXRate
EUR 1.75
EUR 1.75
USD 1
GBP 2.5
JPY 1.5
我不知道如何做到这一点的嵌套查询扔我。我的尝试到目前为止(是相当rubish)如下,
update h
set h.FXRate = fx.rate
from tblHoldings h
inner join fx
on h.FX = fx.Quote
with fx as
(
select quote, rate
from tblFxRates
where base = 'USD'
)
答
您可以使用UPDATE FROM JOIN
:
UPDATE th
SET FXRate = tr.Rate
FROM #tblHoldings th
JOIN #tblFXRates tr
ON th.FX = tr.Quote
WHERE tr.Base = 'USD';
输出:
╔═════╦════════╗
║ FX ║ FXRate ║
╠═════╬════════╣
║ EUR ║ 1.75 ║
║ EUR ║ 1.75 ║
║ GBP ║ 2.5 ║
║ JPY ║ 1.5 ║
║ USD ║ 1 ║
╚═════╩════════╝
另外,您可以使用MERGE
声明:
MERGE #tblHoldings AS th
USING #tblFXRates tr
ON th.FX = tr.Quote
WHEN MATCHED AND tr.Base = 'USD' THEN
UPDATE SET FXRate = tr.Rate;
它可以检测像重复数据损坏:
INSERT INTO #tblFXRates(Base,Quote,Rate) VALUES ('USD','USD',1);
INSERT INTO #tblFXRates(Base,Quote,Rate) VALUES ('USD','USD',2);
使用UPDATE
它静静地通过。
答
试试这个。
update h
set h.FXRate = fx.rate
from tblHoldings h
inner join tblfxrates f on h.FX = f.Quote
where h.base = 'USD'
答
我想这是你想要的东西:
update h
set h.FXRate = fx.rate
from tblHoldings h inner join
fx
on h.FX = fx.Quote and fx.base = 'USD';
啊是的,真的没有必要嵌套!合并对我来说是新东西,所以谢谢你 – mHelpMe