UPDATE одного поля с группировкой по родителю и с условием?
Доброго времени суток!
Образовалась небольшая проблемка. Есть две таблицы: organization (id, name), address (id, name, primary, organizationfk). У одной организации есть несколько адресов и из всех, только один - основной. Если же у организации адрес один, то он по-дефолту - основной.
Проблема заключается в том, что на данном этапе, по ошибке человека, у одной организации несколько основных адресов.
Можете помочь составить запрос, который бы из всех адресов у организации, пометил основным только один. Но есть один момент еще, нужно, чтобы если у организации только один основной, то данную организацию и ее адреса не трогать (они валидные и заполнялись пользователями). Изменить нужно только те адреса, которые привязаны к одой организации, но среди них, несколько основных.
Оставит только один primary адрес для организации.
update address a
set a."primary" = q1.is_primary
from (
select
id
,(row_number() over (partition by organizationfk order by nullif("primary", false))) = 1 is_primary
from address
) q1
where q1.id=a.id
Для правильного вопроса надо знать половину ответа
Примерно так, но лучше сначала проверьте на копии
UPDATE `address` AS `a1`
JOIN (
SELECT MIN(`id`) AS `id` FROM `address` GROUP BY `organizationfk`
) AS `a2` ON `a2`.`id` = `a1`.`id`
LEFT JOIN (
SELECT `organizationfk` FROM `address` WHERE `primary` = 1
) AS `a3` ON `a3`.`organizationfk` = `a1`.`organizationfk`
SET `a1`.`primary` = 1
WHERE `a3`.`organizationfk` IS NULL