sql - update - Error de "entrada de cláusula FROM perdida" de Postgres en la consulta con la cláusula WITH
with sql (2)
De la multa manual :
Hay dos formas de modificar una tabla utilizando la información contenida en otras tablas de la base de datos: utilizando subselecciones o especificando tablas adicionales en la cláusula
FROM
.
Así que 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:
ERROR: falta la entrada de la cláusula FROM para la tabla "se detiene"
Estoy tratando de usar 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;
Me sale 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 WITH parece correcta según la documentación de Postgres. Si ejecuto la consulta por separado en la cláusula WITH, obtengo los resultados correctos.
Esto también puede suceder si escribe mal un nombre de tabla. Por ejemplo:
UPDATE profiles SET name = ( profile.first_name ) WHERE id = 1
En lugar de profiles
usé incorrectamente el profile
! Esto funcionaría:
UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1