因此,我的团队中的一位资深人员正在使用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
答案 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