我正在尝试对表运行更新,但收到错误
ERROR: syntax error at or near "UPDATE"
查询是:
WITH
first_users AS (
select min(created_at) as first_at,
company_id as company_id
from users
group by company_id
)
UPDATE companies
SET first_seen_at = LEAST(first_seen_at,
(SELECT first_at FROM first_users WHERE id = first_users.company_id)
);
你能不能一起运行UPDATE和WITHs吗?看起来很奇怪。
我的查询实际上稍微复杂一点,这就是我使用with语法的原因。当我运行SELECT * FROM first_users而不是UPDATE时,它可以工作,所以UPDATE关键字有什么问题。
答案 0 :(得分:1)
我建议在任何情况下将此更改为update . . . from
。没有理由更新不匹配的记录。所以:
update companies
set first_seen_at = u.first_at
from (select company_id, min(created_at) as first_at
from users
group by company_id
) u
where companies.id = u.company_id and
u.first_seen_at < companies.first_seen_at;
Postgres开始支持CTE版本9.1(http://www.postgresql.org/docs/9.1/static/sql-update.html vs http://www.postgresql.org/docs/9.0/static/sql-update.html)的更新。此方法更好,因为它在更新之前过滤行。
答案 1 :(得分:-3)
尝试封装查询qith BEGIN / END。我不知道PostgreSql,但MsSql不接受WITH而没有BEGIN / END ...