用另一列的和更新列



我使用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

相关内容

  • 没有找到相关文章

最新更新