with update two statement recursive cte sql postgresql with-clause

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