UPDATE语句中右外连接的重要性

时间:2014-05-05 18:30:59

标签: sql sql-server sql-update outer-join right-join

因此,我的团队中的一位资深人员正在使用tb_party表中的相应值更新staging_table。我可以理解他是否使用了内连接(在这种情况下,staging_table将更新为完全匹配)。但他为什么要使用右外连接?有人可以在下面的查询中解释右连接的意义吗?如果某些记录不匹配,登台表会发生什么?

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

2 个答案:

答案 0 :(得分:0)

“RIGHT JOIN关键字返回右表(MTB_AML.dbo.tb_party)中的所有行,左表中的匹配行(staging_table)。当存在左侧时,结果为NULL不配。“

对您来说意味着该表将被连接,并且MTB_AML.dbo.tb_party中与{1}}不匹配的任何数据都是您的更新语句所需的,而您的案例陈述未涵盖这些数据将显示为staging_table

答案 1 :(得分: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