Postgres "Отсутствует запись FROM-clause" при запросе с предложением WITH
Я пытаюсь использовать этот запрос в Postgres 9.1.3:
WITH stops AS (
SELECT citation_id,
rank() OVER (ORDER BY offense_timestamp,
defendant_dl,
offense_street_number,
offense_street_name) AS stop
FROM consistent.master
WHERE citing_jurisdiction=1
)
UPDATE consistent.master
SET arrest_id = stops.stop
WHERE citing_jurisdiction=1
AND stops.citation_id = consistent.master.citation_id;
Я получаю эту ошибку:
ERROR: missing FROM-clause entry for table "stops"
LINE 12: SET arrest_id = stops.stop
^
********** Error **********
ERROR: missing FROM-clause entry for table "stops"
SQL state: 42P01
Character: 280
Я действительно смущен. Предложение WITH выглядит правильно для документации Postgres. Если я отдельно запускаю запрос в предложении WITH, я получаю правильные результаты.
Ответы
Ответ 1
Из точное руководство:
Существует два способа изменить таблицу, используя информацию, содержащуюся в других таблицах в базе данных: использование подвыборок или указание дополнительных таблиц в предложении FROM
.
Итак, вам просто нужно предложение FROM:
WITH stops AS (
-- ...
)
UPDATE consistent.master
SET arrest_id = stops.stop
FROM stops -- <----------------------------- You missed this
WHERE citing_jurisdiction=1
AND stops.citation_id = consistent.master.citation_id;
Сообщение об ошибке даже говорит так:
ОШИБКА: отсутствует запись FROM-clause для таблицы "останавливается"
Ответ 2
Это также может произойти, если вы ошибочно используете имя таблицы. Например:
UPDATE profiles SET name = ( profile.first_name ) WHERE id = 1
Вместо profiles
я неправильно использовано profile
!! Это будет работать:
UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1