Erro de “entrada de cláusula FROM ausente” do Postgres na consulta com cláusula WITH
-
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.
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