ORA-00913: 值过多

Posted

技术标签:

【中文标题】ORA-00913: 值过多【英文标题】:ORA-00913: too many values 【发布时间】:2017-03-10 01:55:25 【问题描述】:

我正在尝试进行更新,但似乎一直遇到这个特定的错误代码。当我运行在外部 WHERE 子句中找到的嵌套 SELECT 语句时,我能够提取需要更新的正确条目,但是一旦我尝试运行应该提交更改的完整语句,就会遇到错误。

UPDATE expertise
SET expertise_level = (expertise_level + 1)
WHERE expertise_level = (SELECT UNIQUE expertise_level, cs.instructor_id
    FROM class_section cs JOIN course c ON (cs.course_code = c.course_code)
    JOIN expertise e ON (c.course_code = e.course_code)
    WHERE (expertise_level < 10) AND (year = '2016'));

我的语法中是否缺少某些内容,或者可能是构造查询的更好方法?谢谢!

【问题讨论】:

【参考方案1】:

看看你的陈述...

...
WHERE expertise_level = (SELECT UNIQUE expertise_level, cs.instructor_id
    FROM class_section 
...

怎么可能 “expertise_level”是否等于“expertise_level,instructor_id”?

【讨论】:

【参考方案2】:

您的子查询有两列,但仅与一列进行比较。一种做你想做的事的方法是使用相关子查询:

UPDATE expertise
    SET expertise_level = expertise_level + 1
    WHERE expertise_level = (SELECT expertise_level
                             FROM class_section cs JOIN
                                  course c
                                  ON cs.course_code = c.course_code 
                             WHERE c.course_code = e.course_code AND
                                   expertise_level < 10 AND 
                                   year = '2016'
                            );

如果可以有多个匹配项,您可能需要使用IN

另一个选项使用带有元组的=IN

UPDATE expertise
    SET expertise_level = expertise_level + 1
    WHERE (course_code, expertise_level) =
              (SELECT c.course_code, expertise_level
               FROM class_section cs JOIN
                    course c
                    ON cs.course_code = c.course_code 
               WHERE expertise_level < 10 AND 
                     year = '2016'
              );

尚不清楚讲师是否应包含在您的逻辑中;这似乎是语法错误的原因。

【讨论】:

以上是关于ORA-00913: 值过多的主要内容,如果未能解决你的问题,请参考以下文章

Oracle插入数据报错 (ORA-00913: 值过多)

SQL、值过多、结果合并

SQL 错误:ORA-00913:值太多 00913.00000 -“值太多”

ORA-00913: 使用大小写时值太多

ORA-00913: oracle 子查询中的值太多

SQL 错误:ORA-00913:值太多