SQL-ERROR: ORA-01427: single-row subquery returns more than one row

SQL-ERROR: ORA-01427: single-row subquery returns more than one row

对于下面的 sql-代码,我收到以下错误:

"ORA-01427: single-row subquery returns more than one row"

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)

在MySQL中: 我认为您不能像这样更新多个列。要更新的一列和 return 要更新的一个值的子查询。

像这样

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

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

语法错误。您宁愿使用如下所示的 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;

我认为错误信息很清楚。您不希望 select distinct 在子查询中。你想确保它 select 一行。为此,请使用 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 一起使用表明存在逻辑缺陷。您真正想要匹配的哪一行?