Как извлечь неуникальные столбцы в другую таблицу в postgresql - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть таблица sample_source, которая содержит 4 столбца:

---------------------------------------------------
|id  | name | target_value | another_target_value |
===================================================
|1   | John |  'wow'       |   'value'            |
---------------------------------------------------
|2   | Liza |  'wow'       |   'value'            |
---------------------------------------------------
|3   | Mark |  'awesome'   |   'value'            |
---------------------------------------------------
|4   |Daniel|  'awesome'   |   'value'            |
---------------------------------------------------

И я хочу извлечь target_value и another_target_value в таблицу values (с дублированием)

Tryingнапишите что-то вроде

with cte as (insert into values(target_value, another_target_value)
             select target_value, another_target_value from sample_source t1
             returning id, t1.id as source_id)
update 
    sample_source
set
    value_id = cte.id
where
    sample_source.id = cte.source_id

на основе этого обсуждения , но я не могу использовать sample_source таблицу в возвращаемом предложении

UPD Ожидаемый результат:

sample_source
------------------------
|id  | name | value_id |
========================
|1   | John |  1       |
------------------------
|2   | Liza |  2       |
------------------------
|3   | Mark |  3       | 
------------------------
|4   |Daniel| 4        |
------------------------

values
--------------------------------------------
|id  | target_value | another_target_value |
============================================
|1   |  'wow'       |   'value'            |
--------------------------------------------
|2   |  'wow'       |   'value'            |
--------------------------------------------
|3   |  'awesome'   |   'value'            |
--------------------------------------------
|4   |  'awesome'   |   'value'            |
--------------------------------------------

конечно у меня есть create, alter и другие скрипты, проблема только с перемещением данных

1 Ответ

0 голосов
/ 30 ноября 2018

Дублирование без id странно.Вы можете перечислить впоследствии в каждой из таблиц, чтобы сделать то, что вы хотите:

with i as (
      insert into vals (target_value, another_target_value)
          select target_value, another_target_value
          from sample_source t1
          returning id, t1.id as source_id
     ),
     i2 as (
      select i.*,
             row_number() over (partition by target_value, another_target_value order by target_value) as seqnum
      from i
     )
update sample_source ss
    set value_id = i2.id
from (select ss2.*,
             row_number() over (partition by target_value, another_target_value order by target_value) as seqnum
      from sample_source ss2
     ) ss2 join
     i2
     on i2.target_value = ss2.target_value and
        i2.another_target_value = ss2.another_target_value and
        i2.seqnum = ss2.seqnum
where ss.id = ss2.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...