Postgres «отсутствует запись FROM-предложения» по запросу с предложением WITH - PullRequest
22 голосов
/ 10 марта 2012

Я пытаюсь использовать этот запрос в 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, я получу правильные результаты.

Ответы [ 2 ]

28 голосов
/ 10 марта 2012

Из подробного руководства :

Существует два способа изменить таблицу, используя информацию, содержащуюся в других таблицах в базе данных: с помощью вложенных выборок или указанием дополнительных таблиц.в предложении 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 для таблицы "остановок"

1 голос
/ 12 ноября 2017

Это также может произойти, если вы неправильно набрали имя таблицы. Например:

UPDATE profiles SET name = ( profile.first_name ) WHERE id = 1

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

UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1
...