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: 值过多的主要内容,如果未能解决你的问题,请参考以下文章