如果col b的值匹配,则用col a中的值填充col a的NULL。

时间:2019-05-17 09:42:51

标签: sql postgresql null duplicates

假设我有COUNTRY | POSTAL CODE列。将会有很多重复项,但是大多数情况下,将在出现COUNTRY的地方缺少某些POSTAL CODE值。如何在COUNTRY匹配的其他行中用COUNTRY的值填充POSTAL CODE

之前

COUNTRY | POSTAL CODE
UK      | ABCXYZ
NULL    | ABCXYZ

之后

COUNTRY | POSTAL CODE
UK      | ABCXYZ
UK      | ABCXYZ

2 个答案:

答案 0 :(得分:1)

我认为下一个更新就是您所需要的:

update table a
set country = b.country
FROM (select DISTINCT country, postal_code from table where country is not null) b
where a.postal_code = b.postal_code
and a.country is not null;

答案 1 :(得分:1)

我将使用相关的子查询来做到这一点:

update t
    set country = (select t2.country
                   from t t2
                   where t2.postal_code = t.postal_code and
                         t2.country is not null
                   limit 1
                  )
where t.country is not null;

这可以利用(postal_code, country)(country)上的索引。我认为这应该是您想要做的最好的性能。