我使用PgAdmin4开发了PostGIS数据库。 我试图用另一个名为“ zones_cultures”的表中另一列(称为“ surface_cultures”)的总和来更新名为“ parcelles”的表中的列(称为“ surface_net”)。表“ zones_cultures”具有带有“ parcelles”的外键(“ zones_cultures.id_parcelles” =“ parcelles.id_egrid”)。
总而言之,“ surface_net”列是“ idsegrid”中“ zones_cultures”组的总和。
所以我执行了此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”列吗? 预先感谢
答案 0 :(得分:0)
当您应用分组依据时由于抛出错误而返回多个值,只需删除分组即可起作用
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
);
答案 1 :(得分:0)
您需要在子查询中使用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);
答案 2 :(得分:0)
您可以在下面尝试
UPDATE public.parcelles p
SET surface_net=sum(zones_cultures.surface_cultures)
inner join zones_cultures where p.id_egrid = zones_cultures.id_parcelles