Question

Je suis en train 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;

J'obtiens 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 semble correct par Postgres documentation.Si je séparément exécuter la requête dans la clause, - je obtenir des résultats corrects.

Était-ce utile?

La solution

À partir de la beaux-manuel:

Il y a deux façons de modifier une table à l'aide des informations contenues dans d'autres tables dans la base de données:à l'aide des sous-sélections, ou en spécifiant des tables supplémentaires dans la FROM la clause.

Donc, vous avez juste besoin d'un DE clause:

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 même en dit autant:

ERREUR:manquant DE la clause d'entrée pour la table "s'arrête"

Autres conseils

Cela peut également se produire si vous en erreur un nom de table.Par exemple:

UPDATE profiles SET name = ( profile.first_name ) WHERE id = 1

au lieu de profiles I mal utilisé profile !!Cela fonctionnerait:

UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top