更新提供了太多行错误,请指导

时间:2014-12-13 10:47:17

标签: sql oracle

select * from tbl_a;
SRNO    T_TEXT
1        a
1        b
1        c
2        a
2        b
3        a
3        b
4        a
----

select * from tbl_b;
SRNO    T_TEXT
1   
1   
1   
2   
2   
3   
3   
4   

我想使用tbl_b.t_text中的值更新tbl_a.t_text。 我这样做它给返回太多行。我可以通过for循环来做到这一点, 但只想通过更新声明。

这是我试过的SQL

update tbl_b b 
set b.t_text = (select a.t_text from tbl_a a 
                 where a.srno = b.srno and b.t_text is null) 
where exists ( select 1 from tbl_a c 
                where c.srno = b.srno); 

抛出错误single row subquery return more than one row

2 个答案:

答案 0 :(得分:1)

您可以使用此代码更新tbl_b

begin
    for i in (select a.* from tbl_a a) loop
        update tbl_b b
        set b.t_text=i.t_text
        where b.srno=i.srno
        and b.t_text is null
        and rownum=1;
    end loop;
end;

我希望它可以帮到你。

答案 1 :(得分:-1)

您可以使用以下查询

UPDATE tbl_a
SET tbl_a.T_TEXT=(SELECT tbl_b.T_TEXT
FROM tbl_b
WHERE tbl_b.SRNO=tbl_a.SRNO);