Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用selects执行SQL插入时出现问题,其中要插入的行数超过1行_Sql_Oracle_Insert - Fatal编程技术网

使用selects执行SQL插入时出现问题,其中要插入的行数超过1行

使用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

我不是最强的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返回以下错误:

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中使用的唯一一件事:您提供的代码返回了我想要准确插入的数百条记录。然而,我的问题是,如何将上面的查询返回的内容转换为插入内容,而不是在屏幕上显示?添加了插入语句