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
一起使用表明存在逻辑缺陷。您真正想要匹配的哪一行?
对于下面的 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
一起使用表明存在逻辑缺陷。您真正想要匹配的哪一行?