首页 > 解决方案 > 更新由选择获取的数据

问题描述

我有一个选择,它可以获取我想要更新的数据行:

SELECT id, version from list MINUS SELECT id, max(version) OVER (PARTITION BY id) from list

表“列表”中的每个列表都有每个 ID 的多个版本。我想更新每个版本的状态,这不是每个 id 的最大值。

我试过了

UPDATE list SET status = '0' WHERE id IN (SELECT DISTINCT id, max(version) OVER (PARTITION BY id)

但这显然不起作用(ora-00913“值太多”)。

有人可以帮助我吗?

标签: sqloracle

解决方案


我想更新每个版本的状态,这不是每个 id 的最大值。

我将其表述为:

update list l
   set status = 0
    where l.version < (select max(l2.version) from list l2 where l2.id = l.id);

这几乎是将您的语句直接翻译成 SQL。

注意:我删除了0. 它看起来像一个数字。如果status是数字,则不要使用字符串常量;当然,如果status是字符串,则使用单引号。


推荐阅读