1

我使用 PgAdmin4 开发了一个 PostGIS 数据库。我试图用另一个名为“zones_cultures”的表中的另一列(名为“surface_cultures”)的总和来更新名为“parcelles”的表中的一列(名为“surface_net”)。表“zones_cultures”有一个带有“parcelles”的外键(“zones_cultures.id_parcelles”=“parcelles.id_egrid”)。

综上所述,“surface_net”列是“id_egrid”对“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”列吗?提前致谢

4

3 回答 3

0

当您应用 group by 它返回多个值时,它会抛出错误,只需删除 group by 它就可以了

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,则在下面使用不需要 group by

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
       );
于 2018-11-20T13:38:04.950 回答
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);
于 2018-11-20T13:38:14.727 回答
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
于 2018-11-20T13:39:23.793 回答