用另一个列的总和更新列
Update column with the sum of another one
我使用 PgAdmin4 开发了一个 PostGIS 数据库。
我尝试用另一个名为 table 的另一列(称为 "surface_cultures")的总和来更新名为 "parcelles" 的 table 中的一列(称为 "surface_net") =25=]。 table "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" 吗?
提前致谢
当您应用 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 然后使用下面不需要分组
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
);
您需要在子查询中使用 WHERE
子句,使其 return 1 个相关结果与您正在更新的 table 的 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);
你可以试试下面
UPDATE public.parcelles p
SET surface_net=sum(zones_cultures.surface_cultures)
inner join zones_cultures where p.id_egrid = zones_cultures.id_parcelles
我使用 PgAdmin4 开发了一个 PostGIS 数据库。 我尝试用另一个名为 table 的另一列(称为 "surface_cultures")的总和来更新名为 "parcelles" 的 table 中的一列(称为 "surface_net") =25=]。 table "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" 吗? 提前致谢
当您应用 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 然后使用下面不需要分组
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
);
您需要在子查询中使用 WHERE
子句,使其 return 1 个相关结果与您正在更新的 table 的 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);
你可以试试下面
UPDATE public.parcelles p
SET surface_net=sum(zones_cultures.surface_cultures)
inner join zones_cultures where p.id_egrid = zones_cultures.id_parcelles