Недоразумение ОБНОВЛЕНИЕ С синтаксиса

Используя PostGIS, у меня есть две таблицы: первая содержит границу 250 городов, а вторая - границу всей страны в мире.

Я пытаюсь повлиять на каждый город страны, к которой он принадлежит. Следующий запрос позволяет мне получить желаемый результат.

SELECT DISTINCT ON (cities.id) cities.id, country.id
FROM cities
LEFT JOIN country ON st_intersects(country.geom, cities.geom)

Но когда я использую этот запрос:

UPDATE cities
SET country_id=subq.id
FROM (SELECT DISTINCT ON (cities.id) country.id
    FROM cities
    LEFT JOIN country ON st_intersects(country.geom, cities.geom)) AS subq

Столбец country_id заполнен тем же номером.

Что я упустил при использовании синтаксиса UPDATE FROM?

1 ответ

Решение

Вам необходимо связать два запроса с условием соединения:

UPDATE cities
  SET country_id=subq.id
FROM (
  SELECT DISTINCT ON (cities.id) country.id
  FROM cities
    LEFT JOIN country ON st_intersects(country.geom, cities.geom)
) AS subq
  where subq.id = cities.id;

Но я думаю, что вам не нужен суб-выбор для начала. Вы можете присоединить таблицу стран непосредственно к таблице городов:

UPDATE cities
  SET country_id = country.id
FROM country 
where st_intersects(country.geom, cities.geom)
Другие вопросы по тегам