обновить все строки таблицы в postgresql - PullRequest
0 голосов
/ 10 октября 2018

Я сравниваю каждую строку таблицы с каждой другой строкой, чтобы найти минимальное расстояние.Я также хочу добавить два столбца, один из которых называется «closest_distance», а другой - «id_of_the_closest_distance».Я знаю, что мне нужно сделать это в два этапа: один - обновить первый ряд, а второй - оценить второй ряд на основе первого.У меня есть запрос, который дает мне ближайшее расстояние, как показано ниже:

SELECT DISTINCT ON (a.id)
  a.id,
  (SELECT
     MIN(ST_HausdorffDistance(a.the_geom, b.the_geom))
   FROM
     gridareas AS b
   WHERE
     b.id != a.id
  )
FROM gridareas AS a; 

Однако я не могу использовать простой

UPDATE tablename SET colname = expression;

и использовать запрос выше в качестве выражения, потому что

ERROR:  subquery must return only one column
LINE 5: (SELECT DISTINCT ON (a.id)

С другой стороны, подзапрос не может возвращать как a.id, так и MIN (ST_HausdorffDistance ()).

Как мне обновить этот столбец?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Не совсем, но это очень помогло, спасибо!Вот что исправило мою проблему:

UPDATE 
  gridareas AS a
SET 
  (hausdorffdistance_to_closest_geom) =
  (SELECT
     MIN(ST_HausdorffDistance(a.the_geom, b.the_geom))
   FROM
     gridareas AS b
   WHERE
     b.id != a.id
  );
0 голосов
/ 10 октября 2018

Это то, что вы хотите?

update gridareas ga
    set (closest_id, closest_dist) =
            (select gs2.id, ST_HausdorffDistance(ga.the_geom, ga2.the_geom) as dist, ga2.id
             from gridareas ga2
             where ga2.id <> ga.id
             order by ST_HausdorffDistance(ga.the_geom, ga2.the_geom)
             limit 1
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...