我试图在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
我真的很困惑。根据Postgres文档,WITH子句显示正确。如果我在WITH子句中单独运行查询,我会得到正确的结果。
答案 0 :(得分:28)
来自fine manual:
使用数据库中其他表中包含的信息修改表有两种方法:使用子选择,或在
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;
错误信息甚至说得很多:
错误:缺少表“停止”的FROM子句条目
答案 1 :(得分:1)
如果您输错了表名,也会发生这种情况。例如:
UPDATE profiles SET name = ( profile.first_name ) WHERE id = 1
而不是profiles
我错误地使用了profile
!!这可行:
UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1