我在历史表的数字列中有一些错误的条目,所以我必须从motorvehicle表中获取数字列值并在历史表中更新。以下查询我用于更新,
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的错误:标量全查询,SELECT INTO语句或VALUES INTO语句的结果包含不止一行"。
如果我仅从查询中删除了前1000行的提取,则它不会出现任何语法错误,但由于事务日志已满而失败。
我的数据库是Db2-LUW V10.5并在Linux服务器上运行。
有人可以帮我解决这个问题吗?如果以上查询不是正确的更新方式,请根据我的情况建议一些新的查询?
答案 0 :(得分:0)
我遇到了与oracle和SQL开发人员相同的问题,因为子查询返回了多条历史记录。例如:对于ID 1,历史记录中只有1个匹配,因此它工作正常,但对于ID 2500,查询匹配多个记录,这些记录在中途引发异常。为了对此进行排序,我需要在子查询中添加更多规范条件和rownum = 1.
在你的情况下,只获取前1000行:它应该是1。