Triggers Spatialite触发器使用点属性的总和更新多边形属性,其中点位于多边形内

Triggers Spatialite触发器使用点属性的总和更新多边形属性,其中点位于多边形内,triggers,sum,spatialite,Triggers,Sum,Spatialite,我的目标是: 我在spatialite DB中有两层: -图层“abonnes”,一个具有属性“nbabonnes”的点图层 -图层“commons”,一个具有属性“nbabonnescom”的多边形图层 每次添加点“abonnes”时,我都希望使用包含新点的多边形内所有点abonnes的“nbabonnes”值之和更新属性“nbaonnescom”。 我试过这个扳机: CREATE TRIGGER abonnes_nw_updcommunes AFTER INSERT ON abonnes B

我的目标是: 我在spatialite DB中有两层: -图层“abonnes”,一个具有属性“nbabonnes”的点图层 -图层“commons”,一个具有属性“nbabonnescom”的多边形图层 每次添加点“abonnes”时,我都希望使用包含新点的多边形内所有点abonnes的“nbabonnes”值之和更新属性“nbaonnescom”。 我试过这个扳机:

CREATE TRIGGER abonnes_nw_updcommunes
AFTER INSERT
ON abonnes
BEGIN
UPDATE communes SET 
    "nbabonnescom" = 
        (
        SELECT SUM(abonnes.nbabonnes)
        FROM abonnes JOIN communes ON
        ( within(abonnes.GEOMETRY, (SELECT communes.GEOMETRY FROM communes, abonnes WHERE ST_Contains(communes.GEOMETRY, NEW.GEOMETRY))))
        )
WHERE within(NEW.GEOMETRY, communes.GEOMETRY);
END;
结果几乎是正确的,但事实上,“nbabonnescom”的结果乘以“communies”多边形的数量。
例如,如果我应该得到23个,并且我有5个“公社”多边形,那么对于nbabonnescom我得到115个。我不明白为什么。

经过几次测试,我找到了正确的SQL代码以获得正确的结果:

CREATE TRIGGER abonnes_nw_updcommunes
AFTER INSERT
ON abonnes
BEGIN
UPDATE communes SET 
    "nbabonnescom" = 
        (
        SELECT SUM(abonnes.nbabonnes)
        FROM abonnes JOIN communes ON
        ( within(abonnes.GEOMETRY,communes.GEOMETRY )) WHERE ST_Contains(communes.GEOMETRY, NEW.GEOMETRY)
        )
WHERE within(NEW.GEOMETRY, communes.GEOMETRY);
END;