Найти - Пользователи
Полная версия: SQL запрос на вставку
Начало » Базы данных » SQL запрос на вставку
1
axinax
Может кто подскажет, три дня бьюсь, не выходит каменная чаша.
Суть такая.В таблице points должны помещаться точки. Поля таблицы: id, proj_id, point_num, geom. Proj_id это номер проекта, в одном проекте точки, и номера точек должны быть уникальны. Номера точек желательно должны идти подряд начиная с 1.
Пишу триггер для автоматического добавления. Сейчас использую промежуточную таблицу с со всеми точками allpoints в которую записываю точки (вершины полигонов), в ней могут быть повторы. Например, пересечение двух полигонов содержат часть точек одного и другого полигонов.
Про unique знаю, но хотелось бы, чтобы точки были уникальны только для одного проекта, если в другой проект входят те же полигоны, то должно быть свое облако точек, в во-вторых поле пространственных данных создается немного по другому и там нет ограничения unique/
Пока написал такой триггер.
 CREATE TRIGGER insert_allpoints
AFTER INSERT ON "allpoints"
begin
insert into points (proj_id, point_num, geom)
select NEW.proj_id, 
ifnull (max(points.point_num),0)+tablen.n, NEW.geom
from allpoints, points, tablen
where NEW.geom not in (select points.geom from points where points.proj_id= NEW.proj_id);
end
tablen - таблица счетчик. Этот триггер не работает нормально. Во-первых не работает при отсутствии точек в points, но это решается. Но он не отбирает уникальные значения. Как организовать счетчик с инкреминацией, чтобы номер точки увеличивался на 1? База данных sqlite, точнее spatialite
PooH
Вот убейте не пойму, зачем вы все это городите. Т.с. мотивационная часть не раскрыта. Хотите нумерацию точек в проекте? Ну так нумеруйте их при выборке, хоть через оконную функцию, хоть уже на клиенте. Упорядоченность то вам id гарантирует. Кстати, unique может быть и композитным.
axinax
Да может быть непонятно. Смотрите, есть фактические границы двух смежных участков. Мне надо вывести таблицы с координатами точек границы. Если точки первого участка пронумеруем 1,2,3,4, а с участком 2 участок 1 граничит по линии 2-3, то нумерация точек границ участка 2 должна быть 2, 5, 6, 3. Вот для этого и нужна таблица с точками и номерами. По идее при выводе координат точек участка номера точек должны выбираться из таблицы points. Еще ситуация усложняется тем, что мы вначале не знаем общее количество участков: поиск пересечения, сравнения и тд. осуществляется автоматически через триггеры, к тому же пользователь в процессе может добавить участки, например проект установления границ или проект раздела участка.
Про композитный unique не знал, можно по подробнее?
А понял, надо сделать составной индекс. Попробую.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB