metallix
@metallix
Backend - developer

Как правильно составить sql запрос?

Приветствую!

Есть таблица следующего вида -
5f6d235df338c405817776.png

Хочу мигрировать данные с конкретными значениями полей ( на скрине- `repossessedAt`, `storingPlace` и `valueNew`) в другую таблицу с колоннами с такими именами ( `repossessed_at`, `storing_place`).
т.е. нужно взять valueNew где field = repossessedAt и valueNew где field = storingPlace (принадлежат к одному event_id) и положить в соотв. колонны в другой таблице.

Пока что код который я родил -
"INSERT INTO vehicles_repossessions (vehicle_id, repossessed_at, storing_place, created_by, updated_by, createdat, updatedat)
                    SELECT
                        e.object_id,
                        c.value_new,
                        e.user_id,
                        e.user_id,
                        e.date,
                        e.date
                    FROM public_logs.erp_eventlog_data_changes c
                    JOIN public_logs.erp_eventlog e ON e.id = c.event_id
                    LEFT JOIN public.erp_users u ON e.user_id = u.user_id
                    WHERE field IN('repossessedAt', 'storingPlace')
                    ORDER BY c.id"

Но естественно, он не делает того, что нужно. т.к. не силен в sql запросах, прощу вашей помощи/совета - как поправить/где неправильно? Заранее спасибо!
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
vilinyh
@vilinyh
Вместо "idkTableName" - ваша таблица.
# insert into ...
select
    tS.value_new as "storing_place",
    tR.value_new as "repossessed_at",
# the rest of the fields required...
from (
    select distinct event_id from idkTableName
) e
join idkTableName tS on tS.event_id = e.id and tS.field = 'storingPlace'
join idkTableName tR on tR.event_id = e.id and tR.field = 'repossessedAt'
# join the rest of the tables...
# order by whatever

Если какие-то данные отсутствуют (например, есть ивент и storingPlace, но нет repossessed), то соответственно нужно менять джойны на left outer.
Если для одного ивента несколько storingPlace и repossessed, то все усложняется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы