【问题标题】: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

标签: sql


【解决方案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 表中有匹配的记录,其字段Remarksnull,您将在@ 中写入'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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      相关资源
      最近更新 更多