【发布时间】:2012-01-22 14:43:13
【问题描述】:
postgreSQL 问题...我在下面有一个更新查询,它使用子查询的结果更新列,但是在某些情况下,子查询将返回 null,这会在列上抛出“非 null”约束,我怎样才能得到如果子查询返回 null,它不会更新?
我尝试过 EXISTS,但这似乎只适用于 WHERE 子句?
UPDATE user_stats as stats
SET ave_price = (
SELECT AVG(l.price)
FROM lengths as l, user_sessions as us
WHERE l.product_type = 'car'
AND l.session_id = us.session_id
AND stats.user_id = us.user_id
)
【问题讨论】:
-
对这个问题很重要:PostgreSQL的版本号?
-
请发布您的表定义(至少是相关列和 PK/FK 约束),如果可能,请提供一个小脚本来使用测试数据填充表。
-
@ErwinBrandstetter:我很想知道您正在寻找哪个功能。是 CTE,因此最低 PostgreSQL 8.4?
-
@tscho:没错。但是,仅在 PostgreSQL 9.1 中引入了用于数据修改命令的 CTE。
Allow data-modification commands (INSERT/UPDATE/DELETE) in WITH clauses -
@ErwinBrandstetter:感谢您指出这一点!
标签: sql postgresql