Вот моя цель:
У меня есть 2 слоя в пространственной БД:
- слой 'abonnes', точечный слой с атрибутом 'nbabonnes'
- слой «коммуны», слой многоугольника с атрибутом «nbabonnescom»
Каждый раз, когда я добавляю точку 'abonnes', я хотел бы обновить атрибут 'nbaonnescom' суммой значений 'nbabonnes' всех точек abonnes, которые находятся в пределах многоугольника, содержащего новую точку.
Я попробовал этот триггер:
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' умножается на количество полигонов 'коммуны'.
Например, если мне нужно получить 23, и у меня есть 5 полигонов «коммуны», я получу 115 для nbabonnescom. Я не понимаю почему.