sql - 更新由选择获取的数据
问题描述
我有一个选择,它可以获取我想要更新的数据行:
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“值太多”)。
有人可以帮助我吗?
解决方案
我想更新每个版本的状态,这不是每个 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
是字符串,则使用单引号。
推荐阅读
- checksum - 校验和识别
- c# - SKCanvasView 事件参数仅包含 Pressed 动作类型
- javascript - 以函数式方式重构 JS 代码 - 闭包
- python - 在 Docker 容器中加载微调的 simpletransformer 模型时出错
- html - 在 Visual Studio 中发生未处理的异常,在取消该错误消息后,我网页上的 css 样式与以前不同
- android-studio - arcore中姿态检测模型的关键点作为输入
- scikit-learn - 无法导入“SelfTrainingClassifier”
- node.js - Flutter 在表单数据中发送多个文件时遇到问题
- web - 如何通过查看源代码了解 Web 应用程序框架
- javascript - 为什么 Object 类主要使用静态方法,而 Array 类主要使用实例方法?