以下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)
答案 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;