首页 > 解决方案 > ORA-01427: 单行子查询在使用 GUID(sys_Guid()) 设置父子关系时返回多行

问题描述

我想让 Id(varchar2) 成为父子关系树表中的 guid 类型。我像那样复制表格

INSERT INTO TEST_TABLE (OLD_ID,
                         ITEM_NAME,
                         PARENT_OLD_ID
                         )
   SELECT 
      OLD_ID,
      NAME,
      PARENT_OLD_ID          
 FROM TEST_TABLE  ;

然后我想更新表以设置新的父子关系,例如:

UPDATE TEST_TABLE A
  SET PARENT_GUID =
      (SELECT GUID
         FROM TEST_TABLE
        WHERE      OLD_ID = A.PARENT_OLD_ID);

我得到的错误是:ORA-01427:单行子查询返回多于一行

我认为在上面更新语句的子查询中选择了两个以上的项目。

有什么办法可以解决这个问题。

提前致谢。

标签: sqloraclesql-update

解决方案


好吧,一个简单的选择是选择 - 例如 - MAX(GUID) 作为

UPDATE TEST_TABLE A
  SET a.PARENT_GUID =
      (SELECT MAX(t.GUID)                   --> this
         FROM TEST_TABLE t
        WHERE      t.OLD_ID = A.PARENT_OLD_ID);

但是您应该调查发生了什么——这些“多行”是相同的(因此 MAX 会修复它),还是它们不同,所以您宁愿不使用这种方法,而是先修复数据。

另外,我建议您在所有列名之前加上表别名。


推荐阅读