недоразумение ОБНОВЛЕНИЕ С синтаксиса - PullRequest
0 голосов
/ 26 сентября 2018

Используя 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 Ответ

0 голосов
/ 26 сентября 2018

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...