替换更新左连接语句中的缺失值
Posted
技术标签:
【中文标题】替换更新左连接语句中的缺失值【英文标题】:replace missing value in update left join statement 【发布时间】:2019-07-25 11:00:05 【问题描述】:我使用更新左连接语句更新了现有表,如下所示:
UPDATE A
SET A.SPSS_FieldForce = B.Remarks
FROM FBL1IN_working as A
left JOIN remarks_master_data as B
ON A.Vendor = B.Vendor_Code;
但是,我需要将 SPSS_FieldForce 列中的 NULL 值替换为“Non SPSS / FFV”值。目前,我正在使用另一个语句执行此操作,如下所示:
UPDATE
FBL1IN_working
SET
SPSS_FieldForce = 'Non SPSS/ FFV'
WHERE
SPSS_FieldForce IS NULL;
这可以完成工作,但我想将这两个不同的语句合并为一个。我确信有一种方法可以替换第一个更新左连接语句中的缺失值,但我只是不知道如何完成它。
【问题讨论】:
您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag 【参考方案1】:好像是sqlserver语法吧? 那么
UPDATE A
SET A.SPSS_FieldForce = WHEN B.Vendor_Code IS NULL THEN 'Non SPSS / FFV' ELSE B.Remarks END
FROM FBL1IN_working as A
LEFT JOIN remarks_master_data as B ON A.Vendor = B.Vendor_Code;
将 B.Vendor_Code 设置为 NULL 意味着您的 B 表中缺少该记录
【讨论】:
【参考方案2】:使用COALESCE()
:
UPDATE w
SET SPSS_FieldForce = COALESCE(rmd.Remarks, 'Non SPSS/ FFV')
FROM FBL1IN_working w LEFT JOIN
remarks_master_data rmd
ON w.Vendor = rmd.Vendor_Code;
请注意,我还更改了表别名,使其有意义 -- 表名的缩写。任意字母会使查询更难阅读。
【讨论】:
COALESCE 可能不是正确的解决方案:如果remarks_master_data
表中有匹配的记录,其字段Remarks
为null
,您将在@ 中写入'Non SPSS/FFV' 987654326@ 表。如果Remarks
不能为空,那么 COALESCE 是正确的解决方案。
@OlivierDepriester 。 . .所有NULL
值都被问题中的第二个UPDATE
替换。
@Gordon Linoff:我看到了,但我想知道它是否已经是现有代码中的错误;)。其实我同意你的看法:如果预期结果如问题中所述,COALESCE 是最好的解决方案【参考方案3】:
UPDATE A SET
A.SPSS_FieldForce = ISNULL( B.Remarks, 'Non SPSS/ FFV')
FROM FBL1IN_working as A
left JOIN remarks_master_data as B ON A.Vendor = B.Vendor_Code;
【讨论】:
以上是关于替换更新左连接语句中的缺失值的主要内容,如果未能解决你的问题,请参考以下文章