0

そのため、私のチームの先輩が staging_table を tb_party テーブルの対応する値で更新しています。彼が内部結合を使用したかどうかは理解できました (その場合、完全一致のために 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

彼はテーブルを結合して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_typee.classificationTypeに設定されます

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

ここで、party_typeが等しい場合、一致するかどうかentityに関係なく、含まれている値は何でも取りますe.TaxNonTaxGovernmentIDNumberEntitiesTaxNonTaxGovernmentIDTypeparty_typeが等しくない場合は、entityに設定されますNULL

于 2014-05-05T18:40:11.607 に答える
0

「RIGHT JOIN キーワードは、右側のテーブル ( MTB_AML.dbo.tb_party) からすべての行を返し、一致する行は左側のテーブル ( staging_table) に返します。一致しない場合、左側の結果は NULL です。」

これは、テーブルが結合され、case ステートメントでカバーされていない update ステートメントに必要なデータとMTB_AML.dbo.tb_party一致しないデータが として表示されることを意味します。staging_tablenull

于 2014-05-05T18:38:42.970 に答える