Обновление нескольких строк в одной таблице на основе нескольких строк в секунду - PullRequest
1 голос
/ 07 июля 2011

У меня есть две таблицы, table1 и table2, каждая из которых содержит столбцы, в которых хранятся геометрии postgis. То, что я хочу сделать, это посмотреть, где геометрия, хранящаяся в любой строке таблицы 2, геометрически пересекается с геометрией, хранящейся в любой строке таблицы 1, и обновить столбец подсчета в таблице 1 с количеством пересечений. Поэтому, если у меня есть геометрия в строке 1 таблицы1, которая пересекается с геометриями, хранящимися в 5 строках таблицы2, я хочу сохранить счет 5 в отдельном столбце в первой таблице. Самым сложным для меня является то, что я хочу сделать это для каждой строки столбца 1 одновременно.

У меня есть следующее:

UPDATE circles SET intersectCount = intersectCount + 1 FROM rectangles 
WHERE ST_INTERSECTS(cirlces.geom, rectangles.geom);

... который, похоже, не работает. Я не слишком знаком с postgres (или sql в целом), и мне интересно, могу ли я сделать все это в одном утверждении или мне нужно несколько. У меня есть некоторые идеи о том, как бы я сделал это с помощью нескольких операторов (или используя цикл for), но я действительно ищу краткое решение. Любая помощь будет высоко ценится.

Спасибо!

1 Ответ

5 голосов
/ 08 июля 2011

что-то вроде:

update t1 set ctr=helper.ctr
from (
  select t1.id, count(*) as cnt
  from t1, t2
  where st_intersects(t1.col, t2.col)
  group by t1.id
) helper
where helper.id=t1.id

?

Кстати: ваша версия не работает, потому что строка может обновляться только один раз в одном операторе обновления.

...