0

因此,我团队中的一位高级人员正在使用 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
4

2 回答 2

0

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

对您而言,这意味着该表将被连接,并且与您的更新语句所需且不包含在您的 case 语句中的任何数据MTB_AML.dbo.tb_party不匹配staging_table将显示为null.

于 2014-05-05T18:38:42.970 回答
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

于 2014-05-05T18:40:11.607 回答