Error de "falta la entrada de la cláusula FROM" de Postgres en una consulta con la cláusula FROM
-
10-12-2019 - |
Pregunta
Estoy intentando utilizar esta consulta en 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;
Recibo este error:
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
Estoy realmente confundido.La cláusula CON parece correcta según la documentación de Postgres.Si ejecuto la consulta por separado en la cláusula CON, obtengo resultados correctos.
Solución
Desde el bien manual:
Hay dos formas de modificar una tabla utilizando información contenida en otras tablas de la base de datos:utilizando subselecciones o especificando tablas adicionales en el
FROM
cláusula.
Entonces solo necesitas una 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;
El mensaje de error incluso dice lo mismo:
ERROR:falta la entrada de la cláusula FROM para las "paradas" de la tabla
Otros consejos
Esto también puede suceder si miste a un nombre de tabla.Por ejemplo:
UPDATE profiles SET name = ( profile.first_name ) WHERE id = 1
en lugar de profiles
¡Voy a usar incorrectamente profile
!Esto funcionaría:
UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1