【问题标题】:Oracle:Update row based on resultset countOracle:根据结果集计数更新行
【发布时间】: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

任何帮助将不胜感激。

【问题讨论】:

    标签: sql oracle oracle11g oracle10g


    【解决方案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 中的更新和插入语句
    猜你喜欢
    • 2017-08-28
    • 2023-03-17
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多