2015-11-02 83 views
1

我有兩個表,更新表加入對臨時表

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' 
) 

回答

1

您可以使用UPDATE FROM JOIN

UPDATE th 
SET FXRate = tr.Rate 
FROM #tblHoldings th 
JOIN #tblFXRates tr 
    ON th.FX = tr.Quote 
WHERE tr.Base = 'USD'; 

LiveDemo

輸出:

╔═════╦════════╗ 
║ 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; 

LiveDemo2

它可以檢測像重複數據損壞:

INSERT INTO #tblFXRates(Base,Quote,Rate) VALUES ('USD','USD',1); 
INSERT INTO #tblFXRates(Base,Quote,Rate) VALUES ('USD','USD',2); 

使用UPDATE它靜靜地通過。

+0

啊是的,真的沒有必要嵌套!合併對我來說是新東西,所以謝謝你 – mHelpMe

1

試試這個。

update h 
set h.FXRate = fx.rate 
from tblHoldings h 
inner join tblfxrates f on h.FX = f.Quote 
where h.base = 'USD' 
1

我想這是你想要的東西:

update h 
    set h.FXRate = fx.rate 
    from tblHoldings h inner join 
     fx 
     on h.FX = fx.Quote and fx.base = 'USD';