ORA-01427: 单行子查询在使用 GUID(sys_Guid()) 设置父子关系时返回多行
Posted
技术标签:
【中文标题】ORA-01427: 单行子查询在使用 GUID(sys_Guid()) 设置父子关系时返回多行【英文标题】:ORA-01427: single-row sub query returns more than one row in setting up parent child relation with GUID(sys_Guid()) 【发布时间】:2019-02-18 07:58:03 【问题描述】:我想在父子关系树表中将 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: 单行子查询返回多于一行
我认为上面更新语句的子查询中选择了两个以上的项目。
有什么办法可以解决这个问题。
提前致谢。
俊
【问题讨论】:
【参考方案1】:嗯,一个简单的选项是选择 - 例如 - 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 会修复它),还是它们不同,所以您宁愿不使用这种方法,而是先修复数据。
另外,我建议您在所有列名之前加上表别名。
【讨论】:
在所有列名之前加上表别名对于相关子查询来说是一个好主意,因为列名的范围跨越两个“表”(可能是另一个子查询)。任何拼写错误都可能意味着您只从一个表中读取列,而未能实现试图实现的相关部分。以上是关于ORA-01427: 单行子查询在使用 GUID(sys_Guid()) 设置父子关系时返回多行的主要内容,如果未能解决你的问题,请参考以下文章