28

私はPostgres9.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句でクエリを個別に実行すると、正しい結果が得られます。

4

2 に答える 2

37

細かいマニュアルから:

FROMデータベース内の他のテーブルに含まれる情報を使用してテーブルを変更するには、副選択を使用する方法と、句に追加のテーブルを指定する方法の2つがあります。

したがって、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;

エラーメッセージには、次のようにも書かれています。

エラー:テーブル「stops」のFROM句エントリがありません

于 2012-03-10T04:18:37.787 に答える
2

これは、テーブル名を誤って入力した場合にも発生する可能性があります。例えば:

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

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

UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1
于 2017-11-12T15:03:26.530 に答える