我有一个看似基本的SQL更新要在postgreSQL表上执行,该表从另一个表中取值,表结构如下......
sessions_table
session_id(PK)
速度
时间
lengths_table
length_id
SESSION_ID
length_dist
我想更新velocity
字段,其中length_dist
值的总和为session_table.session_id = lengths_table.session_id
我正在尝试以下语句但在运行时获取ERROR: null value in column "velocity" violates not-null constraint
(当我指定单行时它可以正常工作)
UPDATE sessions_table
SET velocity = ROUND((SELECT SUM(lengths_table.length_dist)
FROM lengths_table
WHERE lengths_table.session_id = sessions_table.session_id)/time,2)
有人可以建议我哪里出错吗?
由于
大卫
答案 0 :(得分:1)
或者:
您的语法错误(没有length_table)。应该是:
UPDATE sessions_table
SET velocity = ROUND((SELECT SUM(lengths.length_dist)
FROM lengths_table
WHERE lengths.session_id = sessions_table.session_id)/time,2)
或者,在某些情况下,sessions_table记录在lengths_table中没有macthing记录。因此,在这种情况下,您需要将velocity
设置为零,以满足您的非空约束:
UPDATE sessions_table
SET velocity = coalesce(ROUND((SELECT SUM(lengths_table.length_dist)
FROM lengths
WHERE lengths_table.session_id = sessions_table.session_id)/time,2),0)
或者,在length_table中有一些匹配的记录,在length_dist中有空值,所以你需要用零替换那些总和才能工作的记录:
UPDATE sessions_table
SET velocity = ROUND((SELECT SUM(coalesce(lengths_table.length_dist,0))
FROM lengths_table
WHERE lengths_table.session_id = sessions_table.session_id)/time,2)