【发布时间】:2014-03-10 15:53:47
【问题描述】:
我不是最强的 SQL 开发人员(有点新),但我认为我可以做我想做的事情,但我收到了一个错误。
基本上,我正在尝试根据一些选择执行批量插入。下面语句中第一个 select 的值返回 1 个 groupid,但第二个语句返回几百个 requestcategory id。我正在尝试使用以下语句执行这几百个插入:
INSERT
INTO M_GROUPREQUESTCATEGORY
(
GROUPID,
REQUESTCATEGORYID
)
VALUES
(
(select groupid from esaws.m_group where name = 'Administration Group'),
(select requestcategoryid from esaws.m_grouprequestcategory where groupid = (select groupid from esaws.m_group where name = 'Customer Service Group'))
);
我的问题是,SQL 返回以下错误:
错误报告 - SQL 错误:ORA-01427:单行子查询返回多于一行 01427. 00000 - “单行子查询返回多于一行” *原因: *行动:
有人可以向我解释我做错了什么,以及我需要改变什么才能使它正常工作吗?
编辑:明确地说,我试图想出一种方法,不必编写几百个单独的插入。
【问题讨论】:
-
错误非常明显。您试图在只允许返回一行数据但返回 2 行以上的上下文中使用子选择。由于您在那里有 3 个子选择,这是我们可以提供的最接近的帮助。
-
我明白这一点,但我想我要问的是,我如何改变我的查询来让它做我想做的事情
-
好吧,我们帮不了你。我们不知道您的子查询在做什么。您必须弄清楚这 3 个子选择中的哪一个正在/正在返回多行。
-
如果子查询返回多行 - 你想做什么?您应该尝试编写一个单独的 select 语句来返回您想要首先插入的结果。
-
Marc,如果您阅读我在原帖中写的内容,您会看到我告诉您第一个选择返回 1 个 groupid,但第二个选择返回多个请求类别。