我需要根据子查询的结果更新列。如果子查询返回该列的结果,那么必须更新列,如果查询没有返回该列的结果,那么我需要用0更新。
我不知道子查询的放置位置以及如何将它与CASE语句结合起来。这是我的想法,但语法不正确。有人可以帮忙吗?
(SELECT datazones.ogc_fid, count(*) as total
FROM suppliersnew suppliers, datazone_report_resupply datazones
WHERE St_contains(datazones.geom, suppliers.geometry) AND (suppliers.status = 'Under construction' OR
suppliers.status = 'Unknown' OR suppliers.status = 'Operational') GROUP by datazones.ogc_fid ORDER BY total ASC) sources
UPDATE datazone_report_resupply
SET es_actual =
CASE
WHEN datazone_report_resupply.ogc_fid = sources.ogc_fid THEN sources.total
ELSE 0
END
答案 0 :(得分:0)
查询有点难以理解,因为聚合在外部列上(这是不寻常的)。但是,您不需要聚合或按顺序排序。你似乎只关心是否存在一行。
我认为逻辑是:
UPDATE datazone_report_resupply r
SET es_actual =
(CASE WHEN EXISTS (SELECT 1
FROM suppliersnew s
WHERE St_contains(r.geom, s.geometry) AND
s.status IN ('Under construction', 'Unknown', 'Operational')
)
THEN 1 ELSE 0
END);