【问题标题】:Get error when update from other table: ORA-30926: unable to get a stable set of rows in the source tables [duplicate]从其他表更新时出错:ORA-30926:无法在源表中获得一组稳定的行 [重复]
【发布时间】:2018-06-21 03:06:50
【问题描述】:

我有一个查询要使用另一个表中的 Select 更新一个表, 这是我的查询:

MERGE INTO tb1 USING tb2 ON (
        tb1.id = tb2.id
    AND
        tb2.name IS NOT NULL
    AND
        tb2.val = (
            SELECT
                MAX(val)
            FROM
                tb2
        )
) WHEN MATCHED THEN UPDATE
SET tb1.name = tb2.name,
    tb1.birthday = tb2.birthday;

但是,有时我会从日志中看到这个错误:

ORA-30926: 无法在源表中获得一组稳定的行

【问题讨论】:

    标签: oracle sql-update


    【解决方案1】:

    检查连接查询中的重复项:

    select tb1.id, count(*)
    from   tb1 join tb2
             on  tb1.id = tb2.id
             AND tb2.name IS NOT NULL
             AND tb2.val = (SELECT MAX(val) FROM tb2)
    group by tb1.id
    having count(*) > 1
    

    如果返回任何数据,那么就是这种情况。

    【讨论】:

      【解决方案2】:

      我找到了解决问题的方法:

      MERGE INTO tb1 USING 
      (SELECT * FROM tb2 WHERE 
         tb2.name IS NOT NULL
          AND
              tb2.val = (
                  SELECT
                      MAX(val)
                  FROM
                      tb2
      )) tb2 
      ON ( tb1.id = tb2.id) 
      WHEN MATCHED THEN UPDATE
      SET tb1.name = tb2.name,
          tb1.birthday = tb2.birthday;
      

      我在合并之前使用来自 tb2 的子查询,然后更新。

      【讨论】:

        猜你喜欢
        • 2011-01-21
        • 1970-01-01
        • 2014-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 2021-08-05
        相关资源
        最近更新 更多