Erro de “entrada de cláusula FROM ausente” do Postgres na consulta com cláusula WITH

StackOverflow https://stackoverflow.com//questions/9643859

  •  10-12-2019
  •  | 
  •  

Pergunta

Estou tentando usar esta consulta no 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;

Eu recebo este erro:

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

Estou realmente confuso.A cláusula WITH parece correta de acordo com a documentação do Postgres.Se eu executar separadamente a consulta na cláusula WITH, obterei resultados corretos.

Foi útil?

Solução

De bom manual:

Existem duas maneiras de modificar uma tabela usando informações contidas em outras tabelas do banco de dados:usando subseleções ou especificando tabelas adicionais no FROM cláusula.

Então você só precisa de uma cláusula 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;

A mensagem de erro ainda diz isso:

ERRO:faltando a entrada da cláusula FROM para a tabela "paradas"

Outras dicas

Isso também pode acontecer se você digitar incorretamente o nome de uma tabela.Por exemplo:

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

Em vez de profiles eu usei incorretamente profile !!Isso funcionaria:

UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top