J'essaie d'utiliser cette requête dans 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;
Je reçois cette erreur:
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
Je suis vraiment confus. La clause WITH semble correcte selon la documentation Postgres. Si je lance séparément la requête dans la clause WITH, j'obtiens des résultats corrects.
Du beau manuel :
Il existe deux manières de modifier une table à l'aide des informations contenues dans d'autres tables de la base de données: en utilisant des sous-sélections ou en spécifiant des tables supplémentaires dans la clause
FROM
.
Donc vous avez juste besoin d'une clause 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;
Le message d'erreur dit même autant:
ERREUR: entrée manquante de la clause FROM pour la table "arrête"
Cela peut également se produire si vous saisissez un nom de table avec une erreur. Par exemple:
UPDATE profiles SET name = ( profile.first_name ) WHERE id = 1
Au lieu de profiles
, j'ai utilisé incorrectement profile
!! Cela fonctionnerait:
UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1