Объединение таблицы данных с таблицей поиска для исправления неверных данных

#sql #database

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

Вопрос:

Итак, допустим, у меня есть 2 таблицы:

Таблица данных:

 CURRENCY       COUNTRY       VAT           MODE
USD            US            FREEVAT       AIR
EUR            ESP           FREEVAT       SEA
GBP            UK            FREEVAT       ROA
  

Поиск:

 COLUMN_NAME     INPUT_VALUE    OUTPUT_VALUE
COUNTRY         US             United States
COUNTRY         ESP            Spain
COUNTRY         UK             United Kingdom
VAT             FREEVAT        0
  

Есть ли способ объединить эти таблицы в операторе SELECT, чтобы заменить совпадения на column_name ?
Есть ли лучший структурный подход к этой проблеме?

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

1. это очень плохой подход, и у вас должны быть отдельные столбцы или даже отдельные таблицы для хранения данных для разных объектов (например, в вашем примере country и vat)

2. @eshirvana Это вымышленный пример, то, что я пытаюсь достичь здесь, — это процесс в цепочке процессов внутри ELT, который исправит полученные данные

Ответ №1:

Вы можете использовать join , но вам нужно четко указать имена столбцов:

 select d.currency,
       coalesce(lc.output_value, d.country) as country,
       coalesce(lv.output_value, d.vat) as vat,
       d.mode
from data d left join
     lookup lc
     on lc.input_value = d.country and
        lc.column_name = 'COUNTRY' left join
     lookup lv
     on lv.input_value = d.vat and
        lv.column_name = 'VAT'
  

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

1. 2-го coalesce lv не должно быть lc . В противном случае очень хороший ответ, как обычно.

2. Спасибо за ответ, это отлично работает, но все может очень быстро стать уродливым, если количество столбцов в моих таблицах данных увеличится. Есть ли какая-либо альтернатива, в которой я могу избежать продолжения добавления объединений поверх объединений?

3. @rstici . , , я не могу придумать простого решения этой проблемы перекодирования, если вам нужно сделать это по нескольким несвязанным столбцам.