我使用PgAdmin4开发了一个PostGIS数据库。我试图用另一个名为"zones_cultures"的表中的另一列(名为"surface_cultures"(的总和更新一个称为"parcelles"的表的一列(称为"surace_net"(。表"zones_cultures"有一个带有"parcelles"的外键("zones\cultures.id_parcelles"="parcelles.id_egrid"(。
综上所述,"surface_net"列是"区域_文化"组与"id_egrid"的总和。
所以我做了这个SQL查询来更新"surface_net"列:
UPDATE public.parcelles
SET surface_net=
(SELECT sum(zones_cultures.surface_cultures)
FROM parcelles inner join zones_cultures on parcelles.id_egrid = zones_cultures.id_parcelles
group by parcelles.id_egrid);
但它不起作用。结果如下:
ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000
有人能帮助我进行SQL查询以更新"surface_net"列吗?提前感谢
子查询中需要一个WHERE
子句,它可以为正在更新的表的1行返回1个相关结果。我认为这应该有效:
UPDATE public.parcelles p
SET surface_net=
(SELECT sum(zones_cultures.surface_cultures)
FROM parcelles inner join zones_cultures on parcelles.id_egrid = zones_cultures.id_parcelles
where parcelles.id_egrid = p.id_egrid
group by parcelles.id_egrid);
当你应用group-by-it时,它返回了多个值,结果它抛出了错误,只需删除group-by-t就可以工作
UPDATE public.parcelles
SET surface_net=
(SELECT sum(zones_cultures.surface_cultures)
FROM parcelles inner join zones_cultures on parcelles.id_egrid = zones_cultures.id_parcelles
);
或者,如果你想更新每个id,那么通过使用下面的无需组
UPDATE public.parcelles p
SET p.surface_net=
(SELECT sum(zones_cultures.surface_cultures)
FROM parcelles inner join zones_cultures on parcelles.id_egrid = zones_cultures.id_parcelles
where parcelles.id_egrid = p.id_egrid
);
您可以在下面尝试
UPDATE public.parcelles p
SET surface_net=sum(zones_cultures.surface_cultures)
inner join zones_cultures where p.id_egrid = zones_cultures.id_parcelles