使用selects执行SQL插入时出现问题,其中要插入的行数超过1行
我不是最强的SQL开发人员(有点新),但我认为我可以做我想做的事情,但我收到了一个错误 基本上,我正在尝试基于一些选择执行大规模插入。下面语句中第一个select的值返回1个groupid,但第二个语句返回几百个requestcategory id。我试图用以下语句执行这几百个插入:使用selects执行SQL插入时出现问题,其中要插入的行数超过1行,sql,oracle,insert,Sql,Oracle,Insert,我不是最强的SQL开发人员(有点新),但我认为我可以做我想做的事情,但我收到了一个错误 基本上,我正在尝试基于一些选择执行大规模插入。下面语句中第一个select的值返回1个groupid,但第二个语句返回几百个requestcategory id。我试图用以下语句执行这几百个插入: INSERT INTO M_GROUPREQUESTCATEGORY ( GROUPID, REQUESTCATEGORYID ) VALUES ( (select groupid from
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返回以下错误:
Error report -
SQL Error: ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:
错误报告-
SQL错误:ORA-01427:单行子查询返回多行
142700000-“单行子查询返回多行”
*原因:
*行动:
有人能给我解释一下我做错了什么,我需要做些什么才能让它正常工作
编辑:说清楚点,我正试图想出一种不必写几百个独立插入的方法。select语句中的子查询必须计算为单个值,否则会出现此错误。这很有意义,因为您希望填充一个字段的值
所以,当您说“但是第二条语句返回几百个requestcategory id”时,这就是错误所在。对于每个结果,您只需要将其设为1。我怀疑这就是您想要的:
INSERT
INTO M_GROUPREQUESTCATEGORY
(
GROUPID,
REQUESTCATEGORYID
)
select DISTINCT G.groupid, R.requestcategoryid
from esaws.m_group G
Cross Join esaws.m_grouprequestcategory R
where G.name = 'Administration Group'
and R.groupid = (
select groupid
from esaws.m_group
where name = 'Customer Service Group')
and NOT EXISTS(Select * From esaws.m_grouprequestcategory R2
Where R2.GroupID = G.GroupID
And R2.requestcategoryid = R.requestcategoryid)
;
这基本上是将所有请求类别从“客户服务组”复制到“管理组”,如果我理解正确的话。交叉连接的简单方法 我理解您的需求的方式是-您希望将所有GroupID从管理组复制到客户服务组-基于此,您希望进行跨选项卡联接
INSERT INTO schema.tgt_table_name
WITH groupid AS
(SELECT groupid
FROM esaws.m_group
WHERE NAME = 'Administration Group'),
requestcategoryid AS
(SELECT requestcategoryid
FROM esaws.m_grouprequestcategory
WHERE groupid = (SELECT groupid
FROM esaws.m_group
WHERE NAME = 'Customer Service Group'))
SELECT groupid.groupid, requestcategoryid.requestcategoryid
FROM groupid, requestcategoryid
错误很明显。您试图在只允许返回一行数据,但返回2+行的上下文中使用subselect。既然你有3个子选项,那是我们能提供帮助的最接近的了。我理解,但我想我问的是,我该如何改变我的查询,让它做我想做的事情。嗯,我们帮不了你。我们不知道你的子查询在做什么。您必须确定这3个子选择中的哪一个返回了多行。如果子查询返回了多行,您想做什么?你应该试着写一条select语句,返回你想先插入的结果。马克,如果你读了我在原始帖子中写的内容,你会发现我告诉你第一条select语句返回1个groupid,但是第二个select返回多个请求类别。ss781:我试图避免编写几百个插入,并尝试在一个语句中完成。我所做的显然是错误的,但我不知道我需要做什么才能不必写成百上千的insertss781-这不应该是一个答案,而是一个评论。谢谢巴里。当我试着运行这个程序时,我发现“SQL命令没有正确结束”。我看不出我们漏掉了什么……我试图让它运行,但我看不出为什么它认为它不正确ended@user3394338我也用SQL小提琴演奏,不知道为什么。我将试着作为一个单独的问题提问…@user3394338您在Oracle中使用什么来执行这些命令?有人觉得这可能是一个接口问题。我正在使用Sql Developer 4.0。这是我们在workSandeep中使用的唯一一件事:您提供的代码返回了我想要准确插入的数百条记录。然而,我的问题是,如何将上面的查询返回的内容转换为插入内容,而不是在屏幕上显示?添加了插入语句