Перенос данных из одной таблицы в другую

#database #plsql

#База данных #plsql

Вопрос:

Я хочу выполнить перенос данных из одной таблицы в другую таблицу. Исходная таблица содержит названия стран в свободном плавающем тексте, а таблица назначения должна иметь код страны.

Например, исходная таблица содержит названия стран с неправильным написанием.

например, Соединенные Штаты Америки ->
Франк США -> FRA

Можем ли мы иметь некоторую пару ключ-значение в SQL, где мы можем хранить эти неправильные названия стран в 3-символьном коде страны?

Комментарии:

1. Используете ли вы Oracle? Какая версия? Сколько разных значений в исходной таблице?

2. Кроме того, вы описываете это как «миграцию данных». Это одноразовое упражнение или непрерывный процесс? Вы ищете автоматизированное решение или что-то, что требует «навыков и суждений» для правильного перевода?

Ответ №1:

Тег PL / SQL читается как «Oracle». Если это так, посмотрите, поможет ли что-то подобное.

Примеры таблиц:

 SQL> select * from state;

ABB NAME
--- ------------------------
FRA France
USA United States of America
GER Germany

SQL> select * from garbage;

NAME
----------------------
United Stts of Americ
Unted states of Amerca
Frnce
France
Gremany

SQL>
  

Запрос:

 SQL> select g.name, s.name, s.abbr
  2  from state s join garbage g
  3  on utl_match.jaro_winkler_similarity(g.name, s.name) > 90;

NAME                   NAME                     ABB
---------------------- ------------------------ ---
Frnce                  France                   FRA
France                 France                   FRA
United Stts of Americ  United States of America USA
Unted states of Amerca United States of America USA
Gremany                Germany                  GER

SQL>
  

При необходимости измените значение сходства. Я использовал 90 , посмотрите, как он ведет себя для ваших данных.

Комментарии:

1. Помните, что реализация Oracle Jaro-Winkler чувствительна к регистру, поэтому France и FRANCE не набирает 100 баллов. Кроме того, мы получаем ложные срабатывания при довольно высоких пороговых значениях. Например, Iraq 88 баллов против Iran (и наоборот, obvs). Ira 94 балла против обоих Iran и Iraq . Поэтому я думаю, что сопоставление сходства является хорошей отправной точкой, но я бы не стал полагаться на него как на комплексное решение. Конечно, это скорее зависит от того, что Искатель хочет сделать с данными.

2. Спасибо за комментарий, @APC, я согласен со всем, что вы сказали.