質問

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;
.

このエラーを得ます:

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
.

本当に混乱しています。with句はPostgresのドキュメントごとに正しいと表示されます。with句でクエリを別途実行すると、正しい結果が得られます。

役に立ちましたか?

解決

ファインマニュアル

データベース内の他のテーブルに含まれる情報を使用してテーブルを変更する方法は2つあります。サブセレクトを使用するか、FROM句に追加のテーブルを指定します。

だからあなたはただ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;
.

エラーメッセージは言うことができるようになります。

エラー:表の句の入力項目は「停止」

他のヒント

テーブル名を間違えた場合にも発生する可能性があります。例えば:

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

profiles iの代わりに誤ってprofileを使用しました!これはうまくいくでしょう:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top