用于从N个记录的其他表值更新值的SQL查询

时间:2018-05-09 13:31:10

标签: sql db2 sql-update

我在历史表的数字列中有一些错误的条目,所以我必须从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服务器上运行。

有人可以帮我解决这个问题吗?如果以上查询不是正确的更新方式,请根据我的情况建议一些新的查询?

1 个答案:

答案 0 :(得分:0)

我遇到了与oracle和SQL开发人员相同的问题,因为子查询返回了多条历史记录。例如:对于ID 1,历史记录中只有1个匹配,因此它工作正常,但对于ID 2500,查询匹配多个记录,这些记录在中途引发异常。为了对此进行排序,我需要在子查询中添加更多规范条件和rownum = 1.

在你的情况下,只获取前1000行:它应该是1。