Заполните NULL столбца a значением из столбца col, если значения столбца b совпадают - PullRequest
1 голос
/ 17 мая 2019

Представьте, у меня есть 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 ]

1 голос
/ 17 мая 2019

Я бы сделал это с помощью коррелированного подзапроса:

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).Я думаю, что это должно иметь лучшую производительность для того, что вы хотите сделать.

1 голос
/ 17 мая 2019

Я думаю, что следующее обновление это то, что вам нужно:

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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...