ORA-01427:单行子查询在使用GUID(sys_Guid())设置父子关系时返回多于一行

时间:2019-02-18 07:58:04

标签: sql oracle sql-update

我想在父子关系树表中使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:单行子查询返回多个行

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

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

谢谢。

Joon

1 个答案:

答案 0 :(得分:3)

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

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可以修复它)还是它们不同,所以您宁愿不使用该方法,而是先修复数据。

此外,我建议您在所有列名称之前添加表别名。