你好我正在写一个sql查询但是我在GROUP BY的行上遇到语法错误。可能是什么问题,如果可以请帮助。
UPDATE intersection_points i
SET nbr_victimes = sum(tue+bl+bg)
FROM accident_ma a ,intersection_points i
WHERE (ST_DWithin(i.st_intersection,a.geom_acc, 10000) group by st_intersection)) ;
答案 0 :(得分:1)
GROUP BY
是它自己的子句,它不是WHERE
子句的一部分。
这就是你所拥有的:
WHERE (
ST_DWithin(i.st_intersection,a.geom_acc, 10000)
group by st_intersection
)
这就是你需要的:
WHERE ST_DWithin(i.st_intersection,a.geom_acc, 10000)
group by st_intersection
修改:在回复评论时,听起来JOIN
比UPDATE ... FROM
语法需要的要复杂一些。请查看“备注”部分on this page:
当存在FROM子句时,实质上发生的是目标表连接到from_list中提到的表,并且连接的每个输出行表示目标表的更新操作。使用FROM时,应确保连接为每个要修改的行生成最多一个输出行。换句话说,目标行不应该连接到其他表的多个行。如果是,那么只有一个连接行将用于更新目标行,但是将使用哪一个不容易预测。
由于这种不确定性,仅在子选择内引用其他表更安全,但通常比使用连接更难阅读和更慢。
通常这会涉及将语法更改为:
UDPATE SomeTable
SET SomeColumn = 'Some Value'
WHERE AnotherColumn =
(SELECT AnotherColumn
FROM AnotherTable
-- etc.)
然而,在此查询中使用ST_DWithin()
可能会使这一点复杂化。如果没有对此更新的表结构,关系和总体意图有更深入的了解,我可能没有更多的帮助。基本上,您需要为数据库确切地说明需要更新哪些记录以及如何更新它们,这可能涉及以某种方式将查询更改为后一种子选择语法。
答案 1 :(得分:0)