postgresql 根据postgres 15中的匹配值将一个表中的数据添加到另一个表中的数组

afdcj2ne  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(258)

我有两个表,一个是评论表,另一个是照片表。我想把这些URL添加到评论表的数组中。我想根据评论的id来匹配它们。理想情况下,我可以把照片作为JSON对象添加到数组中。一个属性用于照片id,另一个属性用于url。我是postgres和SQL的新手,正在努力想出能够做到这一点的查询。下面是两个表的sql,下面是我尝试的查询:

CREATE TABLE IF NOT EXISTS public.reviews
(
    id integer NOT NULL,
    product_id integer NOT NULL,
    rating integer,
    date text COLLATE pg_catalog."default",
    summary text COLLATE pg_catalog."default" NOT NULL,
    body text COLLATE pg_catalog."default" NOT NULL,
    recommend boolean,
    reported boolean,
    reviewer_name text COLLATE pg_catalog."default" NOT NULL,
    reviewer_email text COLLATE pg_catalog."default" NOT NULL,
    response text COLLATE pg_catalog."default",
    helpfulness integer,
    photos text[] COLLATE pg_catalog."default",
    CONSTRAINT reviews_pkey PRIMARY KEY (id)
)

CREATE TABLE IF NOT EXISTS public.photos
(
    id integer,
    review_id integer,
    url text COLLATE pg_catalog."default"
)

update reviews 
set photos = array_append(photos, photos.url)
where photos.review_id = reviews.id;
6yjfywim

6yjfywim1#

您缺少照片表的FROM子句:

update reviews 
  set photos = array_append(reviews.photos, photos.url)
from photos
where photos.review_id = reviews.id;

在赋值语句的右侧加上photos列的前缀并不是绝对必要的,但是如果有一个表和一个列具有相同的名称,我会发现这样更容易阅读。
请注意,array_append(reviews.photos, photos.url)也可以写为reviews.photos || photos.url

相关问题