Oracle:根据结果集计数更新行

Posted

技术标签:

【中文标题】Oracle:根据结果集计数更新行【英文标题】:Oracle:Update row based on resultset count 【发布时间】:2020-10-21 20:50:36 【问题描述】:

我正在尝试根据返回的行数更新下表。 如果结果集只返回 1 行,则将 stat 设置为 N ,如果 count>1 或 count

所以我的第一个查询返回 id(我们必须从这个查询发送返回的 id 来更新查询) 只有当结果集只有一行时,第二个查询才应该更新。

    create table person(id number(10),stat char(1));
    insert into person(id,stat)values(123,'Y');
    insert into person(id,stat)values(123,'Y');
    insert into person(id,stat)values(345,'Y');
    commit;

输入:

输出:

例如我的选择查询返回 id=345

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果该 id 仅出现一次,此更新会将 stat 设置为 N

UPDATE person p1
   SET p1.stat = 'N'
 WHERE p1.id IN (  SELECT p2.id
                     FROM person p2
                 GROUP BY p2.id
                   HAVING COUNT (*) = 1);

【讨论】:

有什么方法可以让我们先从选择中获取结果并将其传递给更新原因是我在其他插入语句中也使用了这个选择结果。 你可以试试这样的select语句:SELECT id, stat, CASE COUNT (*) OVER (PARTITION BY id) WHEN 1 THEN 'N' ELSE 'Y' END AS new_stat FROM person 我们如何将结果传递给 oracle 中的更新和插入语句

以上是关于Oracle:根据结果集计数更新行的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 对查询结果集操作

MS SQL语句declare游标的求助

Oracle 使用临时表或其他方法

根据来自另一个数据集的 PROC SQL 的结果更新 SAS 数据集

Pentaho Kettle - 如何根据结果集生成更新查询?

oracle 存储过程,数据处理并返回结果集问题