SQL-ERROR:ORA-01427:单行子查询返回多行

时间:2017-03-03 11:31:28

标签: sql oracle oracle-sqldeveloper

以下sql-code我得到以下错误:

  

“ORA-01427:单行子查询返回多行”

update table_result s set (login, position, division, responsibility) = (
select distinct( u.login ), u.position, u.division, u.responsibility from table2 u
where s.user_name=u.login)

3 个答案:

答案 0 :(得分:2)

我认为错误信息很明确。您不希望子查询中有select distinct。你想确保它选择一行。为此,请使用rownum

update table_result s
    set (login, position, division, responsibility) =
             (select u.login, u.position, u.division, u.responsibility
              from table2 u
              where s.user_name = u.login and
                    rownum = 1
             );

注意:

  • distinct不是函数。括号是什么?他们暗示了一种误解。
  • 使用像rownum = 1这样的子查询表明存在逻辑缺陷。你真的想要哪一个匹配的行?

答案 1 :(得分:1)

在MySQL中: 我不认为你可以像这样更新多个列。一列要更新,子查询返回一个要更新的值。

像这样

update table_result s set login=(select distinct( u.login )from table2  
u where s.user_name=u.login)

我不知道为什么它应该是Oracle标记为MySQL

答案 2 :(得分:0)

这是一个错误的语法。您应该使用下面的MERGE语句,因为在Oracle中没有可用的update-join构造。

merge into table_result s 
using (
       select distinct  u.login , u.position, u.division, u.responsibility from table2 u
       join table_result s1 on s1.user_name = u.login) xxx
when matched then update
set s.login = xxx.login, 
s.position = xxx.position, 
s.division  = xxx.division, 
s.responsibility = xxx.responsibility;