gpt4 book ai didi

从多个表更新 SQL

转载 作者:行者123 更新时间:2023-11-29 13:37:05 25 4
gpt4 key购买 nike

我有一个看似基本的 SQL 更新要在从另一个表获取值的 postgreSQL 表上执行,表结构如下...

session 表

session_id (PK)
速度
时间

长度表

长度编号
session_id
长度距离

我想用 length_dist 值的总和更新 velocity 字段,其中 session_table.session_id = lengths_table.session_id

我正在尝试以下语句,但在我运行它时得到错误:列“velocity”中的空值违反了非空约束(当我指定单行时它工作正常)

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)

谁能告诉我哪里出错了?

谢谢

大卫

最佳答案

或者:

您的语法错误(没有 lengths_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)

或者,在某些情况下,session_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)

或者,在 lengths_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)

关于从多个表更新 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7400215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com