我有两个表:
PRODUCT_IMAGE中的产品 >>了解基本商品信息。标题,创建时间等...
PRODUCT_IMAGE >>用于商品图片。 1个产品可能有多张图片
“ product_id”是PRODUCT中“ id”的外键
产品
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
如果
url
中已经存在PRODUCT_IMAGE
,然后将is_primary
更新为True
如果不先插入新行(
product_id
,image_url
,is_primary=False
)到PRODUCT_IMAGE
答案 0 :(得分:1)
如果您的数据库版本为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
,如 Demo
答案 1 :(得分:0)
这需要一个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
);
请参见demo。