#sql #postgresql
#sql #postgresql
Вопрос:
Я пытаюсь обновить столбец ‘ea’ из A значением ‘ea’ в таблице B.
Таблица A имеет ‘cfn’ и ‘ea’ и содержит уникальные записи продукта.
Таблица B содержит ‘cfn’, ‘ea’ и ‘dchain’ и может содержать несколько записей для одного и того же продукта (разные dchain).
Поле таблицы B ‘dchain’ связано с таблицей C, которая имеет значение ‘dc’ и значение ‘prio’ (целое число).
Запись для выбора из таблицы B для обновления таблицы A должна основываться на приоритете таблицы C. Я пробовал несколько вариантов с ограничением и порядком, но почему-то мне не хватает правильной последовательности, так как результат всегда неправильный…..
Комментарии:
1. Пожалуйста, добавьте свой уставший код
2. это был код, который у меня был ранее: update cfn_check a установите a.ea = b.ea из mstrdata_s153 b, где b.dchain= ‘DR’ и a.cfn = b.cfn; Проблема теперь в том, что мне нужно изменить выбор b.dchain на наибольшее значение добавленной таблицыC
Ответ №1:
Если я правильно понимаю, вы можете получить значения для обновления с помощью:
select distinct on (b.cfn) b.*
from b join
c
on b.dchain = c.dc
order by b.cfn, c.priority;
Примечание: Предполагается, что более низкие приоритеты более важны. Если более высокие приоритеты добавляются desc
ко второму ключу.
Затем вы можете включить это в update
:
update a
set a.ea = bc.ea
from (select distinct on (b.cfn) b.*
from b join
c
on b.dchain = c.dc
order by b.cfn, c.priority
) bc
where bc.cfn = a.cfn;
Комментарии:
1. Гордон, спасибо! Идеальное решение, и я многому научился!
2. @GielHendrix . , , Если это отвечает на ваш вопрос, вы можете принять ответ.