【发布时间】:2018-02-07 02:24:57
【问题描述】:
我正在向使用 PostgreSQL 数据库的项目添加新功能。
数据库中有一个名为 brew_sessions 的表 - 它有一个名为 condition_date 的列。
brew_sessions 通过brew_sessions.recipe_id = recipes.id 连接到recipes 表。然后recipes 通过recipes.id = recipe_fermentation_steps.recipe_id 连接到另一个名为recipe_fermentation_steps 的表。
当condition_date 小于或等于从condition_date 值计算的天数时,我想运行更新语句以将brew_sessions 字段上的status 字段设置为30。
这个值是recipe_fermentation_steps.time的总和。
例如:
SELECT
brew_sessions.id,
SUM(recipe_fermentation_steps.time)
FROM brew_sessions
INNER JOIN recipes ON brew_sessions.recipe_id = recipes.id
INNER JOIN recipe_fermentation_steps ON recipes.id = recipe_fermentation_steps.recipe_id
GROUP BY brew_sessions.id
这导致我进行以下查询:
UPDATE brew_sessions
SET status = 30 FROM recipes
INNER JOIN recipe_fermentation_steps ON recipes.id = recipe_fermentation_steps.recipe_id
WHERE brew_sessions.recipe_id = recipes.id
AND brew_sessions.condition_date
<= CURRENT_TIMESTAMP - INTERVAL '1 day' * SUM(recipe_fermentation_steps.time)
但是,这不会运行,因为您不能在 WHERE 中使用聚合函数。
如何正确写出上面的内容?
【问题讨论】:
标签: sql postgresql sql-update aggregate-functions