Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从多个表进行SQL更新_Sql_Postgresql_Sql Update - Fatal编程技术网

从多个表进行SQL更新

从多个表进行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约束(当我指定一行时,它可以正

我有一个看似基本的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约束(当我指定一行时,它可以正常工作)

有人能告诉我哪里出了问题吗

谢谢

大卫

或者:

您的语法错误(没有长度表)。应该是:

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)。不应该是长度表中的
。啊,是的,只是一个打字错误,就会改变这一点