Postgres with句のクエリのエラー "句エントリの欠損エラー"
-
10-12-2019 - |
質問
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
. 所属していません StackOverflow