【发布时间】:2018-05-09 13:31:09
【问题描述】:
我在历史表的数字列中有一些错误的条目,所以我必须从汽车表中获取数字列的值并在历史表中更新。下面的查询我用于更新,
UPDATE history
SET history.number = (SELECT motorvehicle.number
FROM motorvehicle
WHERE motorvehicle.FK_ID = history.FK_ID
AND history.DATE = '2018-05-08'
AND history.state = 35 fetch first 1000 rows only)
当我运行此查询时,我收到类似“[21000] [IBM][DB2/AIX64] SQL0811N: The result of a scalar fullselect, the SELECT INTO statement, or the VALUES INTO statement contains more than one行”。
如果我只从查询中删除前 1000 行,它不会给出任何语法错误,但由于事务日志已满而失败。
我的数据库是 Db2-LUW V10.5,在 Linux 服务器上运行。
谁能帮我解决这个问题?如果上述查询不是正确的更新方式,您可以根据我的情况提出一些新的查询吗?
【问题讨论】:
-
似乎 motorvehicle 至少包含几行具有相同 FK_ID 值的行。子查询中的那些 history.date 和 history.state 条件看起来很奇怪。
-
有些谓词错误。关系是如何定义的?如何识别错误的数字?
-
@jarlh history.number 值在 2018 年 5 月 8 日错误地更新为 history.state = 35 的记录。这就是我在子查询中包含此条件的原因。我检查了机动车表,FK_ID 没有重复项。
-
在更新版本之前和之后添加一些示例表数据。作为格式化文本,而不是图像。
标签: sql db2 sql-update