Postgres “disparus DE la clause d'entrée” erreur sur la requête avec la clause
-
10-12-2019 - |
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.
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