2014-05-05 60 views
0

因此,我的團隊中的一位高級人員正在使用tb_party表中的相應值更新staging_table。我可以理解他是否使用了內部聯接(在這種情況下,staging_table會更新爲完全匹配)。但爲什麼他使用正確的外連接?有人可以在下面的查詢中解釋右連接的意義嗎?如果某些記錄不匹配,暫存表會發生什麼情況?UPDATE語句中右外連接的意義是什麼

UPDATE C 
    SET c.party_first_name = e.customername 
     ,c.party_type = 
     CASE 
     WHEN e.ClassificationType is not null THEN e.ClassificationType 
     ELSE c.party_type 
     END 
     ,c.tax_indicator = 
     case 
     when c.party_type='entity' then e.TaxNonTaxGovernmentIDNumberEntitiesTaxNonTaxGovernmentIDType 
     Else NULL 
     END 
    FROM staging_table C 
     right join MTB_AML.dbo.tb_party E 
     on c.party_key = E.CustomerInternalID 

回答

0

他加入了E表,將`C'中的值設置爲基於不同更新的值。讓我們分解它。

c.party_first_name = e.customername 

在這裏,如果沒有匹配,則party_first_name將被設置爲NULL

c.party_type = 
    CASE 
    WHEN e.ClassificationType is not null THEN e.ClassificationType 
    ELSE c.party_type 
    END 

在這裏,如果沒有匹配,則party_type會留不管它被設置在C,沒有更改。 如果有匹配,那麼它將設置party_type到e.classificationType

c.tax_indicator = 
    case 
    when c.party_type='entity' then e.TaxNonTaxGovernmentIDNumberEntitiesTaxNonTaxGovernmentIDType 
    Else NULL 
    END 

這裏,如果party_type等於entity那麼它會採取任何值在e.TaxNonTaxGovernmentIDNumberEntitiesTaxNonTaxGovernmentIDType無論比賽與否。如果party_type不等於entity那麼它將被設置爲NULL

0

「的RIGHT JOIN關鍵字返回來自右表(MTB_AML.dbo.tb_party)所有的行,用在左表(staging_table)匹配的行,其結果是在左邊NULL時不存在匹配」。

這對你意味着該表將被加入,這是在MTB_AML.dbo.tb_party和不匹配,需要對未覆蓋的情況下,聲明將顯示爲null update語句中staging_table任何數據。

+0

所以會是正確地說,如果他所使用的內部加入,那麼我將無法看到這行沒有更新,因爲那裏不會是左表中有NULL記錄的行。對? –