Загрузка данных из денормализованной таблицы в другую таблицу - PostgreSQL11 - PullRequest
0 голосов
/ 13 июня 2019

У меня есть денормализованная таблица (скажем, TableA) со следующими столбцами:

TableA_Id
Cat1
Cat2
Cat3
Cat4
Cat5
Cat6

С такими записями, как:

TableA_ID | Cat1 | Cat2 | Cat3 | Cat4 | Cat5 | Cat6
   1      |  32  |  29  | NULL | NULL | NULL | NULL
   2      |  30  |  56  | 89   | NULL | NULL | NULL
   3      |  32  |  NULL| NULL | NULL | NULL | NULL
   4      |  55  |  65  | 32   | 69   |  3   |  9

Я хочу преобразовать ее в другую таблицу (скажем, TableB) с содержит уникальные ассоциации ч / б TableA_ID и Cat_ID.

Структура TableB

Assoc_Id serial,
TableA_ID int,
Cat_ID    int;

И TableB будет иметь записи ассоциации (из TableA) Как:

Assoc_Id | TableA_ID | Cat_ID
  1      |    1      |  32
  2      |    1      |  29
  3      |    2      |  30
  4      |    2      |  56
  5      |    2      |  89
  6      |    3      |  32
  7      |    4      |  55
  8      |    4      |  65
  9      |    4      |  32
  10     |    4      |  69
  11     |    4      |  3
  12     |    4      |  9

Может кто-нибудь помочь?

Заранее спасибо.

1 Ответ

0 голосов
/ 14 июня 2019

Элегантность хороша, но иногда достаточно просто грубой силы.Особеннона то, что должно быть 1 раз или очень мало казней.

insert into TableB (TableA_id, Cat_id)
     select TableA_id, cat1 from tableA where cat1 is not null  union all
     select TableA_id, cat2 from tableA where cat2 is not null  union all
     select TableA_id, cat3 from tableA where cat3 is not null  union all
     select TableA_id, cat4 from tableA where cat4 is not null  union all
     select TableA_id, cat5 from tableA where cat5 is not null  union all
     select TableA_id, cat6 from tableA where cat6 is not null ;
...