UpdateError:接收错误ORA - 01427单行子查询返回多行

时间:2012-04-02 03:14:04

标签: sql oracle sql-update ora-01427

我正在尝试根据同一个表(学生表)和列中的另一列更新列 从另一张桌子(学校表)

代码是:

update student_table
set student_code =
(select l.student_code
from school_table l, student_table n
where l.school = n.schoolname)

我收到以下错误

ORA - 01427单行子查询返回多行

任何帮助都将不胜感激。

6 个答案:

答案 0 :(得分:4)

如果运行子查询,则会发现它返回多行。您正在尝试将列更新为等于子查询的结果,因此它只需要一个值。您应该将子查询限制为仅返回一行,例如使用max()或min(),或者您可能想要加入外部student_table?尝试:

update student_table n
set student_code =
(select l.student_code
from school_table l
where l.school = n.schoolname);

答案 1 :(得分:3)

对您要完成的内容进行简单的英语解释会很有帮助。话虽如此,在我看来,你可以用以下SQL [假设school_table和student_table之间的一对多关系]完成你想做的事情,将内部选择作为带有外部更新语句的核心子查询:

update student_table 
set student_code = (select l.student_code 
                    from school_table 
                    where school_table.school = student_table.schoolname) 
;

希望这有帮助。

此致 罗杰

答案 2 :(得分:3)

我们都知道错误的确切含义。 SET只需要设置每列一个值。我们想要实现的是使用另一个表的列中的值更新给定列的所有行。

现在是解决方案:

BEGIN
For i in (select col_X, col_Y from table1) 
LOOP
Update table2 set col1 = i.col_X where col2 = i.col_Y;
END LOOP;
END;

这就是你在SQLDeveloper工作表上运行它的确切方式。他们说这很慢,但这是唯一能解决这个问题的解决方案。

答案 3 :(得分:0)

你的内心疑问..

select l.student_code
from school_table l, student_table n
where l.school = n.schoolname 

可能会返回多个值。运行内部查询并检查值的编号。

答案 4 :(得分:0)

将内部查询的输出限制为一个值,以成功运行查询。

select l.student_code
from school_table l, student_table n
where l.school = n.schoolname 

check this

答案 5 :(得分:-1)

如果您不关心列表中的值或确定它们是相同的,请尝试将rownum = 1添加到子查询条件中。