从多个表进行SQL更新
我有一个看似基本的SQL更新要在一个postgreSQL表上执行,该表从另一个表中获取值,表结构如下 课时表 会话id(主键)从多个表进行SQL更新,sql,postgresql,sql-update,Sql,Postgresql,Sql Update,我有一个看似基本的SQL更新要在一个postgreSQL表上执行,该表从另一个表中获取值,表结构如下 课时表 会话id(主键) 速度 时间 长度表 长度\u id 会话id 长度距离 我想用length\u dist值的总和更新velocity字段,其中session\u table.session\u id=length\u table.session\u id 我正在尝试下面的语句,但得到错误:“velocity”列中的null值在我运行它时违反了notnull约束(当我指定一行时,它可以正
速度
时间 长度表 长度\u id
会话id
长度距离 我想用
length\u dist
值的总和更新velocity
字段,其中session\u table.session\u id=length\u table.session\u id
我正在尝试下面的语句,但得到错误:“velocity”列中的null值在我运行它时违反了notnull约束(当我指定一行时,它可以正常工作)
有人能告诉我哪里出了问题吗
谢谢
大卫或者:
您的语法错误(没有长度表)。应该是:
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\u表记录在Length\u表中没有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_表中有一些匹配的记录,其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)
要么:
您的语法错误(没有长度表)。应该是:
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\u表记录在Length\u表中没有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_表中有一些匹配的记录,其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)
只是想确定这是否是打字错误。在上面的查询中,您有从length
中选择SUM(length\u table.length\u dist)。它不应该是长度表中的。。啊,是的,只是一个打字错误,它会改变,只是想确定它是否是一个打字错误。在上面的查询中,您有从length
中选择SUM(length\u table.length\u dist)。不应该是长度表中的。。啊,是的,只是一个打字错误,就会改变这一点