Postgres - переместить столбец в другую таблицу или обновить другой столбец - PullRequest
1 голос
/ 16 июня 2019

У меня есть две таблицы:

ПРОДУКТ >> для основной информации о предмете.Название, время создания и т. Д. ...

PRODUCT_IMAGE >> для изображений элементов.1 продукт может иметь несколько изображений

"product_id" в PRODUCT_IMAGE - это внешний ключ для "id" в PRODUCT

PRODUCT

id  |   time    |   title   |   image_url
562 |   2019    |   iPhone  |   http://repo.coi/img/3520.png
....

PRODUCT_IMAGE

id  | product_id    |   url             |   is_primary
10  | 4523          |   /ipo/2388/png   | True
....

Мне нужно переместить image_url столбец с PRODUCT на PRODUCT_IMAGE

IF url уже существует в PRODUCT_IMAGE, затем обновите is_primary до True

ЕСЛИ НЕ вставьте новую строку (product_id, image_url, is_primary=False) до PRODUCT_IMAGE

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Если версия вашей БД 9.5+, то может использовать синтаксис insert ... on conflict update.Итак, рассмотрим использование

insert into product_image(product_id, url, is_primary) 
select id, image_url, False from product
   on conflict(url) do update 
  set is_primary = True;

, где product_image.url должно быть unique, как в Демо

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

Для этого требуется UPDATE:

update PRODUCT_IMAGE pi
set is_primary = True
from PRODUCT p
where p.id = pi.product_id and p.image_url = pi.url;

, а затем INSERT:

insert into PRODUCT_IMAGE (product_id, url, is_primary)
select p.id, p.image_url, False
from PRODUCT p
where not exists (
  select 1 from PRODUCT_IMAGE
  where product_id = p.id and url = p.image_url
);

См. Демоверсию .

...