首页 > 解决方案 > 使用在其他字段中具有匹配值的其他记录字段更新记录的字段

问题描述

假设我有一个包含这些字段的表:

所有这些字段的值都不会有任何空值,除了 client_type 字段。client_type 字段将为空,但该行的大部分不为空。

我正在寻找一种方法来更新每一行的client_type,如果它为null,则使用另一行的client_type 的值,其中client_type 不为null,具有匹配的open_date、account_type、currency 和close_date。

我曾尝试合并 2 个子查询(一个搜索空,另一个搜索非空),然后更新表 client_type,其中 2 个子查询的 open_date、account_type、currency 和 close_date 需要匹配。这条语句运行了 20 多分钟,我不得不取消它,无论如何我怀疑它是否正确。

有没有一种有效的方法来做到这一点?

标签: sql

解决方案


这样的事情呢?您仅在哪里自行加入表Client_Type IS NOT NULL。然后当 时Client_Type IS NULL,使用Client_Typefrom 自连接。

SELECT t1.Open_date,
       t1.Account_No,
       t1.Account_Type,
       t1.Currency,
       t1.Close_Date,
       NVL(t1.Client_Type, t2.Client_Type)

  FROM t1
       LEFT JOIN t1 t2
       ON t1.Open_date = t2.Open_date
          AND t1.Account_No = t2.Account_No
          AND t1.Account_Type = t2.Account_Type
          AND t1.Currency = t2.Currency
          AND t1.Close_Date = t2.Close_Date
          AND Client_Type IS NOT NULL;

推荐阅读